【问题标题】:Laravel 5.6 - GroupBy is not workingLaravel 5.6 - GroupBy 不工​​作
【发布时间】:2018-07-04 01:09:53
【问题描述】:

我已经尝试了几种方法,但它不起作用(似乎忽略它)。所以我尝试了:

$user->notes()->groupBy('title')->get();

以上方式完全忽略 groupBy 并且只返回笔记集合。

Note::where('user_id', $user->id)->groupBy('title')->get();

这个输出也完全一样。


在我的database.php中,数据库设置为'strict' => false


我也尝试过使用原始数据库查询,它以一种奇怪的格式返回它(当我使用 groupBy 时,每个标题返回 1 行)

DB::table('notes')->where('user_id', $user->id)->groupBy('title')->get();

我见过很多人面临这个问题,但是(以上)建议的方法都没有解决这个问题。

我可以使用collection->each(function ($note) {...} ) 实现我想要的,但是虽然有 groupBy 可以用 1 行轻松实现这一点,但为什么要繁重的工作..

有人知道为什么它不起作用吗?

【问题讨论】:

  • 建议你debug the query(搜索“Listening For Query Events”)。
  • 下次遇到这个问题时我会这样做。目前用collection->each() 克服了它。会在这里更新
  • 如果您使用 Blade,您可以使用 barryvdh/laravel-debugbar 查看给定路由的查询。
  • 能否请您显示 notes 表的架构?您的数据库驱动程序和版本是什么?
  • 你能显示结果吗dd(Note::where('user_id', $user->id)->groupBy('title')->toSql());

标签: mysql laravel group-by laravel-5.6


【解决方案1】:

你只需要先调用 ->get() 然后调用 ->groupBy() 方法。 那是因为在 SQL 查询中,您需要先选择元素,然后再进行分组。

所以你的代码需要是这样的:

DB::table('notes')->where('user_id', $user->id)->get()->groupBy('title');

这是一个按查询分组的示例:

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);

【讨论】:

  • 对此我不太确定。 get() 方法运行查询,所以我认为它需要最后调用。这就是您在documentation 中找到它的方式。
  • 我在一分钟前尝试过并且工作过(使用 laravel 5.3)
  • 我想你可能会打电话给Collection's groupBy() method
  • 我应该确认我使用 Collection 的 groupBy() 方法而不是查询生成器的方法来工作
【解决方案2】:

使用 select() 并请在选择中按字段添加您的组

   e.g DB::table('notes')->select('title','Other_field')->where('user_id', $user->id)->groupBy('title')->get();

【讨论】:

    猜你喜欢
    • 2019-03-27
    • 2019-01-03
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2018-09-24
    • 1970-01-01
    相关资源
    最近更新 更多