[英]Laravel: Query with where clause gone wrong
我要實現的目標是允許老師將學生導入不同的班級。
注意:一個學生可以參加多個班級。
問題是,當我在選擇下拉列表中顯示學生列表時,它將返回所有學生,除了不在該班級中的學生(該班級是我所在的頁面,例如app.com/classes/5) 。
$students = User::join('group_user', 'users.id', '=', 'group_user.user_id')
->role('student')
->where('group_user.group_id', '!=', $id)
->orderBy('users.name', 'asc')
->get();
如果該班級和另一個班級中的一個學生的名字出現在列表中,並且是重復的名字,則該方法可以顯示所有不在該班級的學生, 但是會顯示該姓名。
我能做什么?
當MySQL的only_full_group_by模式打開時,這意味着使用GROUP BY時將應用嚴格的ANSI SQL規則
您應該嘗試從架構中選擇可以應用group by的字段,而不要選擇*。
$students = User::join('group_user', 'users.id', '=', 'group_user.user_id')
->role('student')
->where('group_user.group_id', '!=', $id)
->select('users.id', 'other fields you used')
->orderBy('users.name', 'ASC')
->groupBy('users.id')
->get();
在您的情況下,“ 不輸入”也很有用
User::select('fields you used')
->role('student')
->whereNotIn('id', DB::table('group_user')->where('group_id', $id)->pluck('user_id')) // $id = 5
->orderBy('name', 'ASC')
->get();
像這樣修改查詢以使用distinct()
;
$students = User::join('group_user', 'users.id', '=', 'group_user.user_id')
->role('student')
->where('group_user.group_id', '!=', $id)
->orderBy('users.name', 'ASC')
->distinct()
->get();
您也可以groupBy('users.id')
$students = User::join('group_user', 'users.id', '=', 'group_user.user_id')
->role('student')
->where('group_user.group_id', '!=', $id)
->orderBy('users.name', 'ASC')
->groupBy('users.id')
->get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.