Konvertieren Sie das Laravel-Objekt in ein Array

Lesezeit: 3 Minuten

Benutzer-Avatar
Dein Freund

Laravel-Ausgabe:

Array
(
    [0] = stdClass Object
    (
        [ID] = 5

    )

    [1] = stdClass Object
    (
        [ID] = 4

    )

)

Ich möchte dies in ein normales Array umwandeln. Möchte das nur entfernen stdClass Object. Ich habe es auch mit versucht ->toArray(); aber ich bekomme einen Fehler:

Aufruf einer Member-Funktion toArray() für ein Nicht-Objekt.

Wie kann ich das beheben?

Funktionalitäten wurden am implementiert http://www.srihost.com

  • kam dieses Objekt von der DB? Ich habe Laravel nicht verwendet, aber vielleicht haben sie eine API, die ein assoziatives Array anstelle von Objekten ergibt. Sie müssen nicht das gesamte Objekt konvertieren und dann in ein anderes Array übertragen

    – Kevin

    3. Oktober 2014 um 6:35 Uhr

  • Ja, es kam von der DB.

    – Dein Freund

    3. Oktober 2014 um 6:37 Uhr

  • Doppelte Frage? stackoverflow.com/questions/28658891/…

    – Stefano Grönland

    15. Februar 2016 um 16:25 Uhr

Benutzer-Avatar
Moritz

foreach($yourArrayName as $object)
{
    $arrays[] = $object->toArray();
}
// Dump array with object-arrays
dd($arrays);

Oder wann toArray() schlägt fehl, weil es eine stdClass ist

foreach($yourArrayName as $object)
{
    $arrays[] =  (array) $object;
}
// Dump array with object-arrays
dd($arrays);

Funktioniert nicht? Vielleicht findest du hier deine Antwort:

Konvertieren Sie das PHP-Objekt in ein assoziatives Array

Benutzer-Avatar
Jarek Tkaczyk

UPDATE seit Version 5.4 von Laravel ist es nicht mehr möglich.

Sie können Ihre Datenbankkonfiguration ändern, wie von @Varun vorgeschlagen, oder wenn Sie dies nur in diesem Fall tun möchten, dann:

DB::setFetchMode(PDO::FETCH_ASSOC);

// then
DB::table(..)->get(); // array of arrays instead of objects

// of course to revert the fetch mode you need to set it again
DB::setFetchMode(PDO::FETCH_CLASS);

Für New Laravel über 5.4 (Ver > 5.4) siehe https://laravel.com/docs/5.4/upgrade Abschnitt Abrufmodus

Event::listen(StatementPrepared::class, function ($event) {
    $event->statement->setFetchMode(...);
});

  • Ich denke, Sie sollten Ihrer Frage hinzufügen, dass dies den Abrufmodus für alle Abfragen ändert, nicht nur für diese. Aber schön zu wissen, dass es auch so geändert werden kann

    – Marcin Nabiałek

    3. Oktober 2014 um 7:33 Uhr

  • Ja, es wirkt sich auf alle Abfragen für diese Anfrage aus, sofern Sie sie nicht rückgängig machen. Bearbeitet, um es klar zu machen.

    – Jarek Tkaczyk

    3. Oktober 2014 um 7:49 Uhr

  • Sie können auch config/database.php bearbeiten, ‘fecth’ => PDO::FETCH_CLASS durch PDO::FETCH_ASSOC ersetzen

    – Tim Wang

    30. Oktober 2015 um 9:56 Uhr


  • Dies funktioniert seit Version 5.4 nicht mehr auf neuem Laravel. Sie verschrotten dies

    – Benjamin Limanto

    9. Februar 2020 um 10:56 Uhr

Nur für den Fall, dass hier noch jemand landet, der nach einer Antwort sucht. Dies kann mit einfachem PHP erfolgen. Eine einfachere Möglichkeit besteht darin, das Objekt mit reverse-json zu versehen.

function objectToArray(&$object)
{
    return @json_decode(json_encode($object), true);
}

Benutzer-Avatar
Touhid

das hat bei mir funktioniert:

$data=DB::table('table_name')->select(.......)->get();
$data=array_map(function($item){
    return (array) $item;
},$data);

oder

$data=array_map(function($item){
    return (array) $item;
},DB::table('table_name')->select(.......)->get());

Benutzer-Avatar
Varun Varunesh

Sie können das gesamte Ergebnis auch immer als Array erhalten, indem Sie es ändern

// application/config/database.php

'fetch' => PDO::FETCH_CLASS,
 // to
'fetch' => PDO::FETCH_ASSOC,

Hoffe, das wird helfen.

Benutzer-Avatar
Coxxs

das hat bei mir in laravel 5.4 funktioniert

$partnerProfileIds = DB::table('partner_profile_extras')->get()->pluck('partner_profile_id');
$partnerProfileIdsArray = $partnerProfileIds->all();

Ausgang

array:4 [▼
  0 => "8219c678-2d3e-11e8-a4a3-648099380678"
  1 => "28459dcb-2d3f-11e8-a4a3-648099380678"
  2 => "d5190f8e-2c31-11e8-8802-648099380678"
  3 => "6d2845b6-2d3e-11e8-a4a3-648099380678"
]

https://laravel.com/docs/5.4/collections#method-all

Benutzer-Avatar
NinoMarconi

Es ist auch möglich, ein Objekt in ein Array umzuwandeln. Das hat bei mir hier funktioniert.

(array) $object;

wird konvertieren

stdClass Object
(
    [id] => 4
)

zu

Array(
    [id] => 4
)

Hatte das gleiche Problem beim Versuch, Daten vom Abfragegenerator an eine Ansicht zu übergeben. Da Daten als Objekt kommen. Sie können also Folgendes tun:

$view = view('template', (array) $object);

Und aus Ihrer Sicht verwenden Sie Variablen wie

{{ $id }}

1120610cookie-checkKonvertieren Sie das Laravel-Objekt in ein Array

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

Privacy policy