【问题标题】:Laravel different objects merge and sortLaravel 不同对象合并排序
【发布时间】: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.');
}

我没有把它整理好......

我尝试在将对象转换为数组之前对它们进行分组,然后将它们返回给我排序的数组,但是我已经对第一个对象进行了排序,然后在第二个对象下面合并到它...

如果我在同一日期(例如今天)同时发布了 CommentFavorite,我希望它们都位于 JSON 文件的“02.09.2016”下

【问题讨论】:

    标签: php laravel sorting merge


    【解决方案1】:

    您应该能够在分组之前使用修改 date_time 的功能来解决您的任务。试试下面的代码:

    $mergedArray = $mergedArray->groupBy(function($item)
    {
        return Carbon::createFromFormat('Y-m-d H:i:s', $item['date_time'])->format('d.m.Y.');
    });
    

    【讨论】:

    • 天哪,我已经为此苦苦挣扎了 2 天......你应该喝啤酒
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 2016-08-11
    • 2017-06-06
    • 2017-10-05
    相关资源
    最近更新 更多