【发布时间】:2017-01-10 04:31:01
【问题描述】:
我有两个不同的对象,在 DB 中有不同的列。因为我需要在时间轴上显示这两个对象,所以我想合并它们并按日期排序。日期列的名称不同,因此我将其添加到 for 循环中。
public function index()
{
$users = array_slice(WPUser::orderBy('id', 'desc')->get()->toArray(), 0, 20);
// count = 80
$comments = WPComment::with('recipe')->orderBy('comment_date', 'desc')->get()->toArray();
foreach ($comments as &$comment) {
$comment['date_time'] = $comment['comment_date'];
}
// count = 241
$favorites = WPFavorite::with('user', 'recipe')->orderBy('date_time', 'desc')->get()->toArray();
// count = 321
$mergedArray = array_merge_recursive($comments, $favorites);
$mergedArray = collect($mergedArray);
$mergedArray = $mergedArray->sortByDesc('date_time');
$mergedArray = $mergedArray->groupBy('date_time');
return $mergedArray;
//return view('dashboard.index', compact('users', 'mergedArray'));
}
问题是我无法得到我想要的。如果我将日期保留为默认的Carbon 格式,它们似乎排序很好,但由于h:m:s 不同,它们当然不会按天分组。但是,如果我在两个模型中都进行了更改:
public function getDateTimeAttribute($date)
{
return Carbon::createFromFormat('Y-m-d H:i:s', $date)->format('d.m.Y.');
}
我没有把它整理好......
我尝试在将对象转换为数组之前对它们进行分组,然后将它们返回给我排序的数组,但是我已经对第一个对象进行了排序,然后在第二个对象下面合并到它...
如果我在同一日期(例如今天)同时发布了 Comment 和 Favorite,我希望它们都位于 JSON 文件的“02.09.2016”下
【问题讨论】: