我有名为Exam
,Type
,Custom
的相似但略有不同的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
个项目。 Exam
,Type
之类的其他项目都消失了。
当前,我将这一部分替换为push
方法。它可以正常工作,但是即使在看到merge
方法的源代码之后,我也找不到我以前的代码不起作用的原因。
答案 0 :(得分:1)
这是因为您的密钥几乎相似(如您在问题中提到的)。如果键匹配,则原始集合中的字符串键的值将被新的集合值替换。因此,如果您想要三个具有相同键的不同模型的值,merge
并不是更好的方法。像id
模型中的Exam
一样,将被Type
模型id
取代,然后将被Custom
模型id
取代。 push
可以,因为它不会替换匹配的键值,而是将其作为集合中的新项推送。因此,请使用push
代替merge