Ларавель красноречив или где в левом соединении терпит неудачу

#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();