Laravel不同的对象groupBy

时间:2016-09-01 12:03:01

标签: php mysql laravel

如何将两个不同的对象合并为一个?我想在时间轴上显示2个表,我需要按创建日期对它们进行分组。如果我尝试只显示一个表它可以正常工作,但我想按日期将它们组合起来。因此,如果在不同的表中存在两行具有相同的创建日期,我希望它们按该日期分组。

    $comments = array_slice(WPComment::with('recipe')->orderBy('comment_date',
        'desc')->get()->groupBy('comment_date')->toArray(), 0, 5);
    $favorites = array_slice(WPFavorite::with('user')->orderBy('date_time',
        'desc')->get()->groupBy('date_time')->toArray(), 0, 5);

我已尝试使用$object1->merge($object2),但由于有一些重写已完成,所以我们并没有完全合并元素。使用array_merge()合并数组的做法基本相同。是否有一些单线解决方案,而不需要写一些讨厌的原始或双重循环乱码?

修改

之前的JSON示例

obj1:{
     id: 1
     title:'blah',
     date: 1.1.2001
     }
obj1:{
     id: 2
     title:'blah blah',
     date: 31.4.2301
     }

obj2:{
     id: 1
     notTitle:'blah',
     somethingSomething : 'something'
     date: 31.4.2301
     }

之后的JSON示例:

1.1.2001:{
        obj1:{
             id: 1
             title:'blah',
             date: 1.1.2001
             }
        }
31.4.2301:{
        obj1:{
             id: 2
             title:'blah blah',
             date: 31.4.2301
             }
        obj2:{
             id: 1
             notTitle:'blah',
             somethingSomething : 'something'
             date: 31.4.2301
             }

        }

1 个答案:

答案 0 :(得分:0)

我设法用array_merge_recursive()方法解决了我的问题。

现在完整的解决方案:

$comments = array_slice(WPComment::with('recipe')->orderBy('comment_date',
            'desc')->get()->groupBy('comment_date')->toArray(), 0, 5);
$favorites = array_slice(WPFavorite::with('user')->orderBy('date_time',
            'desc')->get()->groupBy('date_time')->toArray(), 0, 5);

return array_merge_recursive($comments, $favorites);