2012-12-06 1 views
28

standardmäßig zurückgeben Laravel des ungekochten Abfragemethoden Ergebnisse als Arrays von stdClass Objekten:Wie ein Ergebnis zum Abrufen von einer Raw-Abfrage als Array anstelle ein Objekt in Laravel 3

Array 
(
    [0] => stdClass Object 
     (
      [id] => 1 
      [username] => admin 
      [password] => admin123 
      [email] => [email protected] 
      [created_at] => 2012-12-06 18:57:19 
      [updated_at] => 2012-12-06 00:00:00 
     ) 

    [1] => stdClass Object 
     (
      [id] => 2 
      [username] => userna 
      [password] => user 
      [email] => [email protected] 
      [created_at] => 2012-12-06 00:00:00 
      [updated_at] => 2012-12-05 00:00:00 
     ) 
) 

Die Frage ist, wie man haben Laravel ein Array von Arrays zurückgeben statt:

Array 
    (
     [0] => Array 
      (
       [id] => 1 
       [username] => admin 
       [password] => admin123 
       [email] => [email protected] 
       [created_at] => 2012-12-06 18:57:19 
       [updated_at] => 2012-12-06 00:00:00 
      ) 

     [1] => Array 
      (
       [id] => 2 
       [username] => userna 
       [password] => user 
       [email] => [email protected] 
       [created_at] => 2012-12-06 00:00:00 
       [updated_at] => 2012-12-05 00:00:00 
      ) 
    ) 
+0

Bitte geben Sie, wenn Sie Ihre Code, der dazu führt, dass –

+6

Dies machte für mich Sinn, ich versuche Laravel zu lernen und rannte in diese r Oadblock. Es ist eine echte und gültige Frage - sich fragen, ob die Leute, die es sagen, keine Erfahrung mit diesem Rahmen haben? – NightMICU

+7

Warum zur Hölle war das geschlossen? Menschen müssen über sich selbst hinwegkommen. – dardub

Antwort

19

Original-Antwort für Laravel 3

Eloquent hat eine Methode to_array()

Von docs:

Die to_array Methode wird automatisch alle die packen Attribute auf Ihr Modell, sowie alle geladenen Beziehungen.

$user = User::find($id); 

return Response::json($user->to_array()); 

oder

return Response::eloquent($user); 

Wenn Sie fließend verwenden, können Sie tun, wie Sinan die globale Konfiguration vorgeschlagen, und ändern Sie eher ein assoziatives Array zurück, als Objekte.

Alternativ können Sie ein Objekt in und aus JSON konvertieren, um es in ein Array zu konvertieren, obwohl die globale Option in den meisten Fällen vorzuziehen wäre. Sie können Folgendes in Projekten verwenden, in denen Sie Objekte normalerweise bevorzugen, in bestimmten Fällen jedoch ein Array benötigen. Diese Methode wird mit Eloquent nicht gut funktionieren, verwenden Sie die obigen Methoden in diesem Fall.

$users = DB::table('users')->where('name', '=', 'david')->get(); 

return array_map(function($val) 
{ 
    return json_decode(json_encode($val), true) 
}, $users); 

Eine weitere Option vorübergehend die Laufzeit sein würde Konfiguration

Config::set('database.fetch', PDO::FETCH_ASSOC); 

Für Laravel ~ 4

In Laravel 4 an sollen alle Methodennamen an PSR-2-Standards entsprechen zu ändern.

$user = User::findOrFail($id); 

return Response::json($user->toArray()); 

// In Laravel 5 onward the functions are preferred to facades. 
return response()->json($user->toArray()); 
+1

Unbehandelte Ausnahme Nachricht verfasst: Call to undefined Methode stdClass :: to_array() – Ramesh

+0

Diese für Laravel 3.x ist, 'to_array()' ist eine Methode der Eloquent. Auch in der Dokumentation http://laravel.com/docs/database/eloquent. Könnten Sie uns etwas von Ihrem Code mitteilen, um zu sehen, wo das Problem liegt? –

+0

Hat Fluent ein Äquivalent von 'to_array()'? – Nyxynyx

11

ich weiß nicht, ob Laravel eingebaute Funktion für die Ergebnisse als Array zurückkehrt, aber wenn Sie nicht diese Schnipsel verwenden können:

Wo $data ist Ihr zurückgegebene Array von Objekten

$data = json_decode(json_encode((array) $data), true); 
+0

Vielen Dank. seine Arbeit ... :) – Ramesh

+0

@ramesh Kein Problem, es gibt eine andere Antwort hier, die von mehr Nutzen sein kann, da es laravel Methoden verwendet, siehe DavidBarker Antwort – Dale

+0

Dies ist eine sehr schlechte Praxis, da Sie beide es und dann kodieren es entschlüsseln. Dies führt zu genau demselben Ergebnis: '$ data = (array) $ data;' –

35

Sie können auch alle das Ergebnis immer als Array erhalten, indem

application/config/database.php

'fetch' => PDO::FETCH_CLASS, 

auf Linie 31 bis

'fetch' => PDO::FETCH_ASSOC, 
+0

Arbeit an Laravel 4 – vuhung3990

+0

aber wie es im Code dynamisch zu tun? Ich möchte nur als Array für eine DB-Verbindung abrufen. Ich habe diese Verbindung '$ sqlserv_connection = DB :: connection ($ this-> getSqlServerConnectionName());' Ich möchte etwas wie '$ sqlserv_connection-> fetch (PDO :: FETCH_ASSOC)' Ich weiß, dass dies nicht existiert, aber wie kann Ich erreiche das? –

+1

Ich möchte nur darauf hinweisen, dass die Einstellung 'fetch' nicht verbindungsspezifisch ist und an der Spitze von database.php steht. Irgendwie habe ich herausgefunden, dass es verbindungsspezifisch ist und es zu jeder Verbindung hinzugefügt, was keinen Effekt hat. Hoffentlich hilft das einer anderen fehlgeleiteten Seele. –

Verwandte Themen