laravel集合合并未按预期工作

时间:2019-09-28 09:08:44

标签: laravel collections

我有名为ExamTypeCustom的相似但略有不同的Eloquent模型类。

  $recent = Exam::orderBy('updated_at', 'desc')->take(3)->get();
  $recent = $recent->merge(Type::orderBy('updated_at', 'desc')->take(3)->get());
  $recent = $recent->merge(Custom::orderBy('updated_at', 'desc')->take(3)->get());

以上是我尝试过的方法,它不起作用。最终$recent个集合仅包含Custom个项目。 ExamType之类的其他项目都消失了。

当前,我将这一部分替换为push方法。它可以正常工作,但是即使在看到merge方法的源代码之后,我也找不到我以前的代码不起作用的原因。

1 个答案:

答案 0 :(得分:1)

这是因为您的密钥几乎相似(如您在问题中提到的)。如果键匹配,则原始集合中的字符串键的值将被新的集合值替换。因此,如果您想要三个具有相同键的不同模型的值,merge并不是更好的方法。像id模型中的Exam一样,将被Type模型id取代,然后将被Custom模型id取代。 push可以,因为它不会替换匹配的键值,而是将其作为集合中的新项推送。因此,请使用push代替merge

Laravel Docs