首页 > 解决方案 > 如何将 SQL 查询转换为 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 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“scors.applicants.first_name”;这与 sql_mode=only_full_group_by 不兼容(SQL:通过COUNT(*) > 1从组中选择first_name、、、、last_nameemailtazkira_noapplicantstazkira_no

标签: mysqllaravel

解决方案


当查询具有 group by 子句时,您不能在 select 中包含非聚合列(不在 group by 中或不使用 sum、count、group_concat 等聚合的列)

您需要only_full_group_by在 mysql 中禁用模式才能使此查询正常工作。奇怪的是,如果它在直接用 Mysql 客户端编写的 SQL 中工作,那么考虑到两者都使用相同的 MySQL 服务器和用户,它也应该在 Laravel 中工作。

在这里查看更多信息

'strict' => false,此外,在您的数据库配置中,通过在 config/database.php 中设置禁用严格查询


推荐阅读