2009-12-19 27 views
11

Sto usando Doctrine 1.2, come posso ottenere l'oggetto query nel formato json/array?come convertire oggetto Doctrine in json

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

La seconda risposta è molto buona. [http: // stackoverflow.com/domande/6706485/how-to-encode-dottrina-entità-to-JSON-in-symfony-2-0-ajax-applicazione] [1] [1]: http: // StackOverflow .com/questions/6706485/how-to-encode-doctrine-entities-to-json-in-symfony-2-0-ajax-application – csadan

risposta

27

Una soluzione potrebbe essere quella di utilizzare il metodo toArray() sull'oggetto $user, per avere una semplice matrice contenente solo il youre dati interessati, e, quindi, utilizzare json_encode convertire tale array PHP in una stringa JSON.

Qualcosa di simile, suppongo:

$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); 

(non testato, ma non dovrebbe essere troppo lontano da lavorare ...)

+1

Ecco come lo faccio. – Sam

+1

Questa risposta deve essere contrassegnata come accettata !!! – hossaindoula

+4

gestisce le relazioni? –

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

Io non so perché il toArray() darà l'altro campo nella tabella, ad esempio avrà il campo "password", sembra fetchArray() può darmi i campi corretti nella query.

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 è una trasformazione diretta dell'oggetto in un formato di matrice. fetchArray è un po 'più intelligente nel senso che non è realmente una trasformazione, ma più di un'estrazione. – Oddman

1

Per JSON:

$user->exportTo('json'); 

;-)

6

Trouble with $ record-> exportTo ('json') è che verrà esportato tutti i campi record tutti. E nella maggior parte dei casi non è un comportamento desiderabile (ad esempio quando questo pezzo di json deve essere passato al browser). Un modo per limitare la portata di esportazione per specificare i campi DQL selezionare:

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

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

$ user_json poi avrà qualcosa di simile:

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

in modo da non esporre il valore del campo "password", ma fa esporre la struttura del database sottostante. Ancora una volta, potrebbe non essere quello che vogliamo. Quello che faccio è specificare i campi in DQL selezionare + Visualizza come array di codificare poi JSON:

$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 questo caso JSON sarà simile a qualcosa come:

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

Ora Doctrine ORM Transformations è fuori, permette di convertire le entità in array scalari e viceversa

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

Questo solo un link come risposta! –

Problemi correlati