2009-12-19 9 views
11

Ich verwende Doctrine 1.2, wie kann ich das Abfrageobjekt in JSON/Array-Format?How to Doctrine Objekt in JSON konvertieren

$user = Doctrine_Query::create() 
->select('u.id, u.username, u.firstname, u.lastname') 
->from('User u') 
->orderby('u.id') 
->execute(); 
+0

Zweite Antwort ist sehr gut. [http: // Stapelüberlauf.com/Fragen/6706485/how-to-encode-Lehre-Einheiten-to-json-in-symfony-2-0-Ajax-Anwendung] [1] [1]: http: // Stackoverflow .com/questions/6706485/How-to-Encoding-Doktrin-Entitäten-zu-JSON-in-Symfony-2-0-Ajax-Anwendung – csadan

Antwort

27

Eine Lösung könnte die toArray() Methode auf dem $user Objekt zu verwenden ist, eine einfache Anordnung zu haben, nur die Daten youre interessiert an enthält, und dann verwenden json_encode, den PHP-Array in einem JSON Zeichenfolge zu konvertieren.

So etwas, nehme ich an:

$user = Doctrine_Query::create() 
->select('u.id, u.username, u.firstname, u.lastname') 
->from('User u') 
->orderby('u.id') 
->execute(); 

$userArray = $user->toArray(); 
$json = json_encode($userArray); 

(nicht getestet, aber es sollte nicht zu weit von der Arbeit ...)

+1

Dies ist, wie ich es mache. – Sam

+1

Diese Antwort sollte als akzeptiert markiert werden !!! – hossaindoula

+4

behandelt dies Beziehungen? –

1
$users2 = Doctrine_Query::create() 
->select('u.id, u.username, u.firstname, u.lastname') 
->from('User u') 
->orderby('u.id'); 
$tmp2 = $users2->fetchArray(); 

Ich weiß nicht, warum Die toArray() gibt das andere Feld in der Tabelle, z Es wird das "Passwort" -Feld haben, es scheint fetchArray() kann mir die richtigen Felder in der Abfrage geben.

toArray()

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [username] => user1 
      [password] => password 
      [firstname] => John 
      [lastname] => Smith 
     ) 

fetchArray()

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [username] => user1 
      [firstname] => John 
      [lastname] => Smith 
     ) 
+0

toArray ist eine direkte Transformation des Objekts in ein Array-Format. fetchArray ist etwas cleverer in dem Sinne, dass es nicht wirklich eine Transformation, sondern eher eine Extraktion ist. – Oddman

1

Für JSON:

$user->exportTo('json'); 

;-)

6

Ärger mit $ rekord> exportTo ('json') wird exportiert alle Datensatzfelder. In den meisten Fällen ist dies kein wünschenswertes Verhalten (z. B. wenn dieses Stück json an den Browser übergeben werden sollte). Eine Möglichkeit, den Umfang der Ausfuhr zu begrenzen, ist zu spezifizieren Felder in DQL wählen:

$user = Doctrine_Query::create() 
      ->select('u.id, u.name') 
      ->from('User u') 
      ->addWhere('u.id = ?', $id) 
      ->fetchOne(); 

$user_json = $user->exportTo('json'); 

$ user_json hat dann etwa so aus:

{ 
    "id": 123, 
    "name": "John Smith", 
    "password": null, 
    "deleted": null 
} 

So ist es nicht aussetzen „Passwort“ Feldwert aber zeigt zugrunde liegende Datenbankstruktur offen legen. Auch hier ist vielleicht nicht das, was wir wollen. Was ich tue, ist Felder in DQL angeben wählen + holen als Array dann json kodieren:

$user = Doctrine_Query::create() 
      ->select('u.id, u.name') 
      ->from('User u') 
      ->addWhere('u.id = ?', $id) 
      ->fetchOne(array(), Doctrine::HYDRATE_ARRAY); 

$user_json = json_encode($user); 

In diesem Fall json wie etwas aussehen wird:

{ 
    "id": 123, 
    "name": "John Smith" 
} 
0

Jetzt Doctrine ORM Transformations ist out, es ermöglicht, konvertiert Entities in skalare Arrays und zurück

class User implements ITransformable { 
    use Transformable; 
// ... 
echo json_encode($user->toArray()); 
+0

Dies ist nur ein Link als Antwort! –