Laravel:查询where子句出错

时间:2019-02-05 02:16:28

标签: php laravel laravel-5

我要实现的目标是允许老师将学生导入不同的班级。

注意:一个学生可以有多个班级。

问题是,当我在选择下拉列表中显示学生列表时,它应该返回所有学生,除了不在该班级中的学生(该班级是我所在的页面,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();

如果该班级的学生和另一个班级的学生的姓名出现在列表中,并且是重复的姓名,则此方法有效并显示所有不在该班级的学生

我该怎么办?

2 个答案:

答案 0 :(得分:2)

打开MySQL的only_full_group_by模式时,这意味着使用GROUP BY时将应用严格的ANSI SQL规则

您应该尝试从架构中选择可以应用分组依据的字段,而不要选择*。

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

答案 1 :(得分:1)

像这样修改查询以使用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();