【问题标题】:laravel collection merge didn't work as I expectedlaravel 集合合并没有像我预期的那样工作
【发布时间】:2019-09-28 09:08:44
【问题描述】:

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

  $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 方法的源代码后,我也找不到我以前的代码不起作用的原因。

【问题讨论】:

    标签: laravel collections


    【解决方案1】:

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

    Laravel Docs

    【讨论】:

    • 你试过了吗?我复制粘贴 OP 的问题,无法重现
    • 感谢您的友好回答。现在我明白为什么我以前的代码不起作用了。
    • @CaddyDZ 是的,我之前测试过。
    猜你喜欢
    • 2016-06-19
    • 2013-04-11
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2023-01-01
    • 2012-01-07
    • 2014-06-28
    相关资源
    最近更新 更多