2017-01-19 7 views
0

Я пытаюсь объединить несколько коллекций, но я не могу это сделать по какой-либо причине. Мой код выглядит так:Неудачные слияния коллекций Laravel?

$restaurant = \App\Restaurant::find(3); 
$images  = $restaurant->images; 
$userimages = $restaurant->userimages; 
$hours  = $restaurant->hours; 

$collectionMerge1 = $images->merge($userimages)->merge($hours); 
$collectionMerge2 = $restaurant->userimages->merge($hours)->merge($images); 
$collectionMerge3 = collect(array_merge($images->all(), $userimages->all(), $hours->all())); 

Единственное слияние, которое работает, является последним. Предыдущие не отображают все элементы, которые содержатся в коллекциях. Почему это? Что я делаю не так? Если вы посмотрите на изображение, вы увидите, что в слияниях 1 и 2. отсутствуют объекты. Я пробовал несколько способов сделать это, но работает только последний. Может быть, метод слияния имеет проблемы с ключами?

enter image description here

ответ

0

Учитывая, что каждый из ваших значений на самом деле представляет собой правильный сбор (установленный через отношения), вы должны использовать push вместо merge. Это происходит потому, что merge фактически перезаписать некоторые элементы, когда ключевые пары уже совпадают:

$aggregates = collect([]); 
$aggregates ->push($images)->push($userImages)->push($hours); 
dd($aggregates); //as expected 
+0

Я пытался, но когда вы используете толчок, вы не объединить коллекции в одну, вместо того, что вы делаете, чтобы добавить больше коллекций и не объединяет их. – suarsenegger