Laravel:查询用WHERE子句出了错

问题描述 投票:0回答:2

我试图做到的,是让教师学生导入到不同的类别。

注:一个学生可以是多个类。

问题是,当我告诉在选择下拉学生名单,应该返回所有的学生除了不在这个班的学生(类是,我在页面上,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();

这工作,并表明不在此特定类的所有学生,但如果学生是在这一类和其他类自己的名字出现在列表和重复的名字。

我能做什么?

php laravel laravel-5
2个回答
2
投票

当MySQL的only_full_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();

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

© www.soinside.com 2019 - 2024. All rights reserved.