如何在Laravel 5.2中正确合并2个以上的Eloquent Collections?

时间:2016-12-29 09:02:47

标签: php laravel laravel-5 eloquent laravel-5.2

我现在的问题是每当我创建两个新分配时,合并集合中的最后一个Post就会消失。

// Here is the code: 
@foreach($user->groups as $group)
    <?php
    $all = $group->posts->merge($group->assignments)->merge($group->quizzes);

    $sorted = $all->sortByDesc('created_at');
    ?>
        @foreach($sorted as $item)
        <?php
        $val = get_class($item);
            switch ($val)
        {
            case 'App\Post':
            ?>
                Post:{{$item->body}}<br>    
            <?php
                break;
            case 'App\Assignment':
                ?>
                Assignment:{{$item->title}}<br>

                <?php
                break;
            case 'App\Quiz':
            ?>
                Quiz:{{$item->body}}<br>

            <?php
                break;
        }
        ?>
    @endforeach
 @endforeach

那么我怎样才能将各种Eloquent Collections合并在一起,然后按最新的排序呢?

1 个答案:

答案 0 :(得分:0)

合并Eloquent系列,模型&#39;主键用于标识重复项。因此,分配将覆盖具有相同ID的帖子,然后quizes将覆盖具有相同ID的帖子和作业。

为了达到你想要的效果,你需要使用 values()方法将Eloquent集合转换为由整数索引的常规集合。

替换:

$all = $group->posts->merge($group->assignments)->merge($group->quizzes);

$all = $group->posts->values()->merge($group->assignments->values())->merge($group->quizzes->values());