2017-02-27 8 views
3

Ich versuche, eine redegewandte Sammlung mit einer anderen redegewandten Sammlung in Laravel 5.3 anzuhängen.Hängt Laravel-Sammlung mit einer anderen Sammlung an

Das ist, was ich bisher getan habe:

$entries = Entry::all(); 
$posts = Post::all(); 

$entries->merge($posts); 

ich oben merge() wie der Code zu verwenden versucht, aber es scheint, mich mit dieser Art von Problem bin stecken (da einige von ihnen das gleiche haben id mit demselben Wert):

Collection merge eating up some rows

Irgendwelche Ideen?

+0

Was in der ersten Sammlung gespeichert? Es ist schwierig, ohne Code zu antworten – ad4s

+0

Ich aktualisierte meine Frage – tronic

+0

Versuchen Sie, die zweite Sammlung zu iterieren und jedes Element auf die erste Sammlung zu schieben. https://laravel.com/docs/5.4/collections#method-push – ad4s

Antwort

7

Ich glaube, man kann die beiden eloquent Sammlungen wie diese zusammenführen:

$mergedCollection = $entries->toBase()->merge($posts); 

Danach es ein collection mit allen Einträgen ist.

+0

Dies scheint zu funktionieren, tut mir leid, zusätzliche Frage hinzuzufügen, aber was ist, wenn ich drei eloquente Sammlungen habe? Sagen wir '$ entries',' $ posts' und '$ users'? Muss ich 'toBase()' jedes Mal vor dem Zusammenführen eines anderen aufrufen? oder einfach nur 'merge()'? – tronic

+1

Ich denke, Sie müssen 'toBase()' jedes Mal aufrufen, wenn Sie in Ihre aktuelle Sammlung zusammenführen möchten. Aber am besten wäre es, es in einem kleinen Prototyp auszuprobieren :) –

0

Die merge() -Methode erhält ein Array, so dass Sie etwas zu tun, wie

$entries->merge($posts->toArray()); 

Laravel Collections: merge() method

+0

Ich habe einen Fehler bekommen 'Call to a member Funktion getKey() on array' – tronic

+0

Aparently müssen Sie die Illuminate \ Database \ Eloquent \ Collection in ein Illuminate verwandeln \ Support \ Collection: etwa so: 'collect ($ entries) -> merge ($ posts> toArray());' [mehr Infos hier] (https://github.com/laravel/framework/Ausgaben/9163) – Jeff

Verwandte Themen