So führen Sie Laravel-Objekte im Controller zusammen

Lesezeit: 3 Minuten

Benutzer-Avatar
sehummel

Ich habe einen Controller, in dem ich Daten aus mehreren Tabellen mit parallelen Strukturen kombinieren möchte. Was ich am Ende haben möchte, ist ein Objekt, das ich vom Controller zurückgeben kann, damit ich es in Backbone analysieren kann.

Ich möchte so etwas tun:

public function index()
{
    $mc = MainContact::where('verified', '=', '1')->get();
    $sm = SendMessage::where('verified', '=', '1')->get();

    $obj = (object) array_merge((array) $mc, (array) $sm);
    return $obj;
}

Mir wurde von einem anderen Beitrag auf StackOverflow gesagt, dass dies in PHP 5.3+ funktioniert. Dies gibt jedoch den folgenden Fehler in Laravel zurück:

UnexpectedValueException: The Response content must be a string or object implementing
 __toString(), "object" given.

Wie implementiere ich diese Methode in Laravel? Beide $mc und sm gültige Objekte in Laravel zurückgeben.

  • Ich benutze gerade Laravel 4 alpha. Ich werde auf die Beta upgraden, wenn sie heute oder am Montag herauskommt oder wann immer sie herauskommt.

    – sehummel

    11. Januar 2013 um 17:54 Uhr

  • Ich habe versucht, eine separate Klasse mit einem Leerzeichen zu erstellen __toString() Methode darin, weiß aber nicht, wo ich sie in Laravel 4 speichern soll.

    – sehummel

    11. Januar 2013 um 18:07 Uhr

  • Es sieht so aus, als ob die Klasse in die geht vendor Mappe

    – sehummel

    11. Januar 2013 um 18:28 Uhr

  • Was ist der Pfad zu Eloquent von der vendors Mappe?

    – sehummel

    11. Januar 2013 um 18:48 Uhr

Heutzutage kann man verwenden

$new_collection = $collection->merge($other_collection).

Das funktioniert ein Laravel 4 und scheint sowohl Arrays als auch Sammlungen zu handhaben.

  • In meinem Szenario frisst es einige Zeilen nach der Sammlungszusammenführung auf.

    – Ali Gajani

    2. März 2015 um 17:46 Uhr

  • Verwendet Ihre Sammlung Strings als Schlüssel? Collection::merge verwendet das array_merge von PHP, das String-Schlüssel, aber keine Integer-Schlüssel überschreibt. Wenn dies ein Problem darstellt, können Sie die Laravel-Sammlung jederzeit unterklassen, um die Implementierung zu überschreiben.

    – trm42

    3. März 2015 um 8:12 Uhr

  • In meinem Fall nur die $other_collection bleibt und die $collection verschwindet. Warum???

    – Pathos

    6. Juni 2016 um 18:09 Uhr

  • @AliGajani, ja, das tut es. Wenn ein Zeichenfolgenschlüssel in den angegebenen Elementen mit einem Zeichenfolgenschlüssel in der ursprünglichen Sammlung übereinstimmt, überschreibt der Wert des angegebenen Elements den Wert in der ursprünglichen Sammlung. Wenn die Schlüssel der angegebenen Elemente jedoch numerisch sind, werden die Werte an das Ende der Auflistung angehängt. Schau es dir hier an: laravel.com/docs/5.7/collections#method-merge

    – Allan Mwesigwa

    4. Oktober 2018 um 19:46 Uhr


Was Sie hier tun können, ist, die Arrays der beiden Abfrageergebnisse zusammenzuführen und dann die Antwort mit der JSON-Ausgabe wie unten gezeigt zu verwenden.

$array = array_merge($mc->toArray(), $sm->toArray());
return Response::json($array);

Wir können die Sammlung wie folgt verwenden

$admins = User::where('type', '=', 'admin')->get();

$authors = User::where('type', '=', 'author')->get();

$admin_author_collection = $admins->merge($authors);

Bitte beachten Sie auch die verschiedenen Sammelmethoden unter dem folgenden Link

http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html

  • Das wollte ich. Danke

    – Cholowao

    27. Februar 2018 um 14:48 Uhr

Benutzer-Avatar
Hassan Jamal

Route::get('test', function(){
    $rank = Rank::get();
    $policy = Policy::get();
    $obj = (object)array_merge_recursive((array)$rank , (array)$policy);
    var_dump($obj);
});

Das funktioniert für mich. Verwenden Sie anstelle von array_merge array_merge_recursive().

Könnte man einfach verwenden array_merge(firstObject,secondObject) Funktion.

$obj = array_merge($mc, $sm);
return $obj;

1098380cookie-checkSo führen Sie Laravel-Objekte im Controller zusammen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy