如何将SQL查询转换为Laravel格式

时间:2019-02-18 10:46:59

标签: mysql laravel

我想将下面的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组选择emailtazkira_noapplicantstazkira_no *)> 1)

2 个答案:

答案 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,它将允许您运行此查询。