我想将下面的SQL书面查询转换为laravel格式。请帮助
SELECT id, first_name, last_name,email,tazkira_no, COUNT(id) As NoRegister FROM
applicants WHERE is_valid=0 AND is_new =1 GROUP BY
tazkira_no HAVING
COUNT(*) > 1
我尝试的是:
$object = DB::table('applicants')
->select('first_name','last_name','email','tazkira_no')
->groupBy('tazkira_no')
->havingRaw('COUNT(*) > 1')
->get();
return $object;
但无法正常工作,并给我错误:
SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT列表的表达式#1不在GROUP BY子句中,并且包含未聚合的列'scors.applicants.first_name',该列在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by不兼容(SQL:从
first_name
组中按last_name
组选择tazkira_no
,applicants
,tazkira_no
*)> 1)
答案 0 :(得分:1)
当查询具有group by子句时,select中不能包含未聚合的列(不属于分组依据的列或未使用诸如sum,count,group_concat等聚合)的列
您需要在mysql中禁用only_full_group_by
模式才能使此查询正常运行。奇怪的是,如果它可以直接在Mysql客户端中编写的SQL中使用,那么考虑到两者都使用相同的MySQL服务器和用户,它也应该可以在Laravel中使用。
查看更多信息here
此外,在您的数据库配置中,通过在config / database.php中设置'strict' => false,
来禁用严格查询
答案 1 :(得分:0)
在'strict' => false,
中设置config/database.php -> mysql
,它将允许您运行此查询。