簡體   English   中英

Laravel:查詢where子句出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM