#laravel #eloquent
Вопрос:
Мой красноречивый вопрос не дает мне того, чего я ожидаю. Когда я использую orWhere, он ставится в конце запроса, а не после левого соединения.
$r = groupofpupil::where('group_id' , '=', '13')
->leftjoin('pupils' ,'pupil1_id' , '=', 'pu_id' )
->orWhere('pupil0_id', '=', 'pu_id')
->leftjoin('users', 'pupils.id', '=', 'users.id')
->select('*')
->get();
sql-запрос является:
SELECT * from groupofpupils
LEFT JOIN pupils on pupil1_id = pu_id
LEFT JOIN users on pupils.id = users.id
WHERE group_id = 13
OR pupil0_id = pu_id
но я ожидал этого
SELECT * from groupofpupils
LEFT JOIN pupils on pu_id = pupil1_id OR pu_id = pupil0_id
LEFT JOIN users on pupils.id = users.id
WHERE group_id = 13
Пожалуйста, что я делаю не так?
Ответ №1:
Попробуйте что-нибудь вроде этого :
$r = groupofpupil::leftjoin('pupils', 'pupils.pupil1_id', '=', 'groupofpupils.pu_id')
->leftjoin('users', 'users.id', '=', 'pupils.id')
->where('groupofpupils.group_id', 13)
->orWhere('pupils.pupil0_id', '=', 'groupofpupils.pu_id')
->get();