Tham gia nhiều lần trong Eloquent từ phạm vi địa phương
Có câu hỏi liên quan đến Eloquent và chức năng phạm vi:
Giả sử hai phạm vi:
class Result extends Model {
public function scopeIsRace($query) { return $query
->join('sessions', 'sessions.id', '=', 'results.session_id')
->where('sessions.type', 10)
}
public function scopeIsOfficial($query) { return $query
->join('sessions', 'sessions.id', '=', 'results.session_id')
->join('events', 'events.id', '=', 'sessions.event_id')
->where('events.regular_event', 1);
}
}
Việc gọi cả hai trong số chúng thực hiện hai phép nối các phiên và truy vấn kết quả trông giống như thế này (không hoạt động)
select * from `results` inner join `sessions` on `sessions`.`id` = `results`.`session_id` inner join `sessions` on `sessions`.`id` = `results`.`session_id` inner join `events` on `events`.`id` = `sessions`.`event_id` where `driver_id` = 24 and (`sessions`.`type` = 10 or `sessions`.`type` = 11) and `events`.`regular_event` = 1
Làm cách nào để ngăn chặn kết hợp kép trên các phiên?
Trả lời
1 Siggi
Cảm ơn bạn rất nhiều @Nima. Hoàn toàn quên về một whereHas nâng cao. Đã sử dụng một cấu trúc sẽ lấy cái này từ câu hỏi đề xuất của bạn và nó hoạt động hoàn toàn tốt:
public function scopeIsRace($query) { return $query->whereHas('session', function($query){ $query->where('type', 10);
});
}
public function scopeIsOfficial($query) { return $query->whereHas('session', function($query) { return $query->whereHas('event', function($query2) { $query2->where('regular_event', 1);
});
});
}