Слияние коллекции Laravel не сработало, как я ожидал - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть похожие, но немного отличающиеся классы Eloquent Model с именами Exam, Type, Custom.

  $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, я не могу найти причину, по которой мой предыдущий код не работает.

1 Ответ

1 голос
/ 28 сентября 2019

Это потому, что ваши ключи почти одинаковы (как вы упомянули в вопросе).Значения строковых ключей из исходной коллекции будут заменены новыми значениями коллекции, если ключ совпадает.Так что merge не лучший подход, если вы хотите, чтобы значения трех разных моделей имели одинаковые ключи.Как и те же id из Exam модель будет заменена на Type модель id, а затем будет заменена Custom модель id.push в порядке, так как он не заменяет совпадающие значения клавиш, а выдвигает его как новый элемент в коллекции.Поэтому используйте push вместо merge

Документы Laravel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...