Laravel 查询构建器 - 查询不工作但在 SQL 控制台中工作
Posted
技术标签:
【中文标题】Laravel 查询构建器 - 查询不工作但在 SQL 控制台中工作【英文标题】:Laravel Query builder - query not working but works in SQL console 【发布时间】:2017-03-15 15:36:38 【问题描述】:我变得非常困惑,我试图通过 laravel 查询生成器运行查询,它应该可以工作,但它会抛出奇怪的错误。
我正在尝试在日期范围之间计算状态为“Won”的提示表中的记录,然后在 user_id 上加入用户表以检索用户名。
这是我的查询生成器
$topfiveTipsters = DB::table('tips')
->select(DB::raw('count(status) as wincount, users.name'))
->join('users', 'users.id', '=', 'tips.user_id')
->whereBetween('tips.created_at',[$start,$end])
->where('status','Won')
->groupBy('users.id')
->orderBy('wincount', 'desc')
->get();
但是它抛出了错误
QLSTATE[42000]: 语法错误或访问冲突: 1055 'digthetip.users.name' 不在 GROUP BY 中(SQL: select count(status) as wincount, users.name from
tips
inner join @987654325 @ onusers
.id
=tips
.user_id
其中tips
.created_at
在 2016-11-01 00:00:00 和 2016-11-02 10:39:02 和 @987654332 之间@ = 由users
.id
赢得组@wincount
desc)
但如果我运行确切的查询,错误已输出到 phpMyAdmin 中的 SQL 控制台,查询运行良好并返回我需要的结果。
我错过了什么吗?我对 Laravel 比较陌生,我很困惑它仍然会抛出错误。
【问题讨论】:
您能否发布您正在比较的两个 SQL 查询? 加入后可以使用addSelect laravel.com/docs/5.3/queries#selects 我试图运行的查询是这个 select count(status) as wincount, users.name fromtips
inner join users
on users
.id
= tips
.user_id
其中tips
.created_at
在 '2016-11-01 00:00:00' 和 '2016-11-02 10:39:02' 和 status
= 'Won' group by @987654345 @.id
订购 wincount
desc
检查github.com/laravel/framework/issues/14997
如果在 select 中添加 users.id 会怎样?
【参考方案1】:
好的,事实证明你可以在 /app/database.php 中关闭 SQL 严格模式,这将防止错误发生。
'严格' => 假,
【讨论】:
在我看来这有点矫枉过正,当(通过阅读文档dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-strict,激活似乎很有帮助)。作为最后一次尝试,现在更多的是好奇,如果您在原始 sqlDB::raw('IGNORE count(status) as wincount
上添加“IGNORE”会发生什么?
这只是抛出以下错误 IGNORE count(status) as wincount, users.name, users.id from tips
inner join u' at line 1 (SQL: select IGNORE count(status) as wincount, users.name, users.id from
tips` inner join users
on users
。 id
= tips
.user_id
其中tips
.created_at
介于 2016-11-01 00:00:00 和 2016-11-02 11:12:53 和 status
= 被@分组987654333@.id
order by wincount
desc
谢谢。我会尽量记住这一点,以备将来我的选择出现奇怪的问题。很高兴你解决了。
是的,这确实很不方便,但我看不到任何其他方式。
该死,要不是这个帖子我可能已经找了很久了,谢谢!以上是关于Laravel 查询构建器 - 查询不工作但在 SQL 控制台中工作的主要内容,如果未能解决你的问题,请参考以下文章
4 个连接 + 3 个 where 子句的查询构建器正确语法(Laravel 5.7)