【问题标题】:Laravel Query builder - query not working but works in SQL consoleLaravel 查询构建器 - 查询不工作但在 SQL 控制台中工作
【发布时间】: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 @ on users.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 from tips 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
  • 如果在 select 中添加 users.id 会怎样?

标签: php mysql laravel eloquent


【解决方案1】:

好的,事实证明你可以在 /app/database.php 中关闭 SQL 严格模式,这将防止错误发生。

'严格' => 假,

【讨论】:

  • 在我看来这有点矫枉过正,当(通过阅读文档dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-strict,激活似乎很有帮助)。作为最后一次尝试,现在更多的是好奇,如果您在原始 sql DB::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 usersid = 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
  • 谢谢。我会尽量记住这一点,以备将来我的选择出现奇怪的问题。很高兴你解决了。
  • 是的,这确实很不方便,但我看不到任何其他方式。
  • 该死,要不是这个帖子我可能已经找了很久了,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 2020-12-23
  • 2011-09-23
  • 2010-10-16
相关资源
最近更新 更多