【问题标题】:Laravel 5 groupBy on collectionLaravel 5 groupBy 收藏
【发布时间】:2015-10-15 03:21:15
【问题描述】:

我正在尝试按截止日期对任务进行分组以显示在列表中。

2015 年 1 月 1 日,星期三 任务1 任务 2

函数如下:

public function index()
{
    $user = Auth::user();
    $tasks = $user->tasks()->orderBy('due_at','ASC')->get();    
    $tasks_group = $tasks->groupBy('due_at');   
    return view('tasks.index', compact('tasks_group'));
}

但我收到错误消息:

array_key_exists(): 第一个参数应该是字符串或者整数

我尝试了其他几种方法,但每个日期只返回一个任务。

对我在这里做错的任何帮助都会很棒。

【问题讨论】:

  • 为什么不在builder中分组?像这样:$tasks = $user->tasks()->groupBy('due_at')->orderBy('due_at','ASC')->get();
  • 您好,感谢您的评论,按照您的建议,我每个日期只会得到 1 个结果,而不是根据我的问题获得多个结果。
  • 只是一个更新,我使用的是 Laravel 5.1.1,我知道 groupBy 方法与以前的版本不同:laravel.com/docs/5.1/upgrade#upgrade-5.1.0
  • 如果我执行以下操作: $tasks_group = $user->tasks()->get()->groupBy('due_at');它按预期工作并按任务名称分组,但我需要按截止日期字段分组。
  • 看起来它不起作用,因为due_at字段是碳日期对象...如果我将due_at转换为字符串,它可以正常工作。

标签: php mysql laravel laravel-5 eloquent


【解决方案1】:

您需要预先加载tasks 关系,然后执行groupBy

试试下面的代码:

$user = Auth::user();

$user->load(['tasks' => function ($q) {
    $q->orderBy('due_at', 'ASC');
}]);

$tasks_group = $user->tasks->groupBy('due_at');

return view('tasks.index', compact('tasks_group'));

【讨论】:

    猜你喜欢
    • 2016-01-21
    • 2019-12-17
    • 2022-01-13
    • 2019-03-27
    • 1970-01-01
    • 2016-01-22
    • 2016-08-20
    • 1970-01-01
    • 2017-10-21
    相关资源
    最近更新 更多