2016-12-29 45 views
1

我现在的问题是,无论何时我创建两个新分配,合并集合中的最后一个Post消失。如何在Laravel 5.2中正确地合并2个以上的雄辩集合?

// 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 

那么我该如何正确合并各种雄辩集合,然后按最新排序呢?

回答

0

合并Eloquent集合时,模型的主键用于标识重复项。因此,分配将覆盖具有相同ID的帖子,然后测验会覆盖具有相同ID的帖子和分配。

为了实现你想要的,你需要使用值()方法将Eloquent集合转换为整数索引的常规集合。

替换:

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

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

我“上的空调用一个成员函数值()” – Mark

+0

有一个错误,该错误你有岗位,作业和测验的关系在你的组模型中定义?其中一人失踪,可能是关系名称中的拼写错误 –

+0

是的,帖子,作业和测验模型都与群组模型相关联,并且他们的关系为多对多。 – Mark