如果我在phpmyadmin中编写以下查询,它将运行并返回正确的结果
select `u`.*, count(t.empid) as totalassignedtask from `users` as `u` left join `tasks` as `t` on `t`.`empid` = `u`.`id` where `u`.`role` = 'user' group by `t`.`empid`
但是,如果我这样在laravel中编写此查询
$allemp = DB::table('users as u')
->leftJoin('tasks as t','t.empid','=','u.id')
->where('u.role','=','user')
->select('u.*',DB::raw('count(t.empid) as totalassignedtask'))
->groupBy('t.empid')
->get();
我得到一个错误:
Illuminate \ Database \ QueryException(42000)
SQLSTATE [42000]:语法错误或访问冲突:1055'employee.u.id'不在GROUP BY中(SQL:选择u
。*,count(t.empid)作为{{1}中的totalassignedtask }(以tasks
的身分在t
上以users
的身分加入u
。t
=empid
。u
其中id
。u
=role
的用户组。t
)
答案 0 :(得分:1)
在config / database.php中,“ mysql”更改为:
'strict' => true,
为假。 希望对您有帮助!
答案 1 :(得分:1)
这可能是SQL_MODE问题。
在您的config / database.php中,在连接中,更改mysql
strict => false
答案 2 :(得分:0)
感谢您的回答-我更改了代码中的列名,并且可以使用
$allemp = DB::table('users as u')
->join('tasks as t','t.empid','=','u.id')
->where('u.role','=','user')
->select('u.id','u.name','u.email',DB::raw('count(t.empid) as totalassignedtask'))
->groupBy('u.id','u.name','u.email')
->orderBy('totalassignedtask', 'asc')
->get();