mysql - 如何将 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_name
)tazkira_no
applicants
tazkira_no
解决方案
当查询具有 group by 子句时,您不能在 select 中包含非聚合列(不在 group by 中或不使用 sum、count、group_concat 等聚合的列)
您需要only_full_group_by
在 mysql 中禁用模式才能使此查询正常工作。奇怪的是,如果它在直接用 Mysql 客户端编写的 SQL 中工作,那么考虑到两者都使用相同的 MySQL 服务器和用户,它也应该在 Laravel 中工作。
在这里查看更多信息
'strict' => false,
此外,在您的数据库配置中,通过在 config/database.php 中设置禁用严格查询
推荐阅读
- sql - 获取特定条件下的 Pivot 值
- sql - 如何在pl sql中编写一个每30个字符换行的函数
- css - 如何设置边距值的scss动态类名
- jquery - Typescript 在添加 jquery 时失败,无法解析命名空间 Sizzle
- javascript - 只防止文本区域中的空格
- reactjs - 为什么我需要测试 Redux 实现,而我只能使用测试库测试 DOM?
- r - 将姓名与电子邮件匹配(如果准确)
- c# - AutoMapper 不更新 Collection 项目
- c++ - C++:进程以退出代码 139 完成(被信号 11:SIGSEGV 中断)
- ansible - 没有用户名和密码的ansible telnet