2009-12-19 6 views
11

J'utilise Doctrine 1.2, comment puis-je obtenir l'objet de la requête au format json/array?comment convertir l'objet Doctrine en json

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

La deuxième réponse est très bonne. [http: // stackoverflow.com/questions/6706485/how-to-encode-doctrine-entités à JSON en symfony-2-0-ajax-application] [1] [1]: http: // stackoverflow .com/questions/6706485/comment-encoder-doctrine-entités-à-json-dans-symfony-2-0-ajax-application – csadan

Répondre

27

Une solution pourrait être d'utiliser la méthode toArray() sur l'objet $user, d'avoir un simple tableau contenant uniquement le que vous êtes de données intéressé et, puis, utilisez json_encode pour convertir ce tableau PHP à une chaîne JSON.

Quelque chose comme ça, je suppose:

$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 testé, mais il ne devrait pas être trop loin de travailler ...)

+1

Voici comment je le fais. – Sam

+1

Cette réponse doit être marquée comme acceptée !!! – hossaindoula

+4

est-ce que cela gère les relations? –

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

Je ne sais pas pourquoi le toArray() donnera l'autre champ dans la table, par exemple il aura le champ "mot de passe", il semble fetchArray() peut me donner les champs corrects dans la requête.

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 est une transformation directe de l'objet en un format de tableau. fetchArray est un peu plus intelligent dans le sens où ce n'est pas vraiment une transformation, mais plutôt une extraction. – Oddman

1

Pour JSON:

$user->exportTo('json'); 

;-)

6

Trouble with $ Record-> ExportTo ('json') est qu'il va exporter tous les champs d'enregistrement. Et dans la plupart des cas, ce n'est pas un comportement souhaitable (par exemple lorsque ce morceau de JSON doit être transmis au navigateur). Une façon de limiter le champ d'exportation est de préciser les champs dans DQL sélectionnez:

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

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

user_json de $ aura alors quelque chose comme ceci:

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

Il n'expose pas la valeur du champ « mot de passe », mais expose la structure de base de données sous-jacente. Encore une fois, pourrait ne pas être ce que nous voulons. Ce que je fais est de spécifier les champs dans DQL sélectionnez + chercher sous forme de tableau encode puis 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); 

Dans ce cas JSON va ressembler à quelque chose comme:

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

Maintenant Doctrine ORM Transformations est dehors, il permet de convertir des entités en tableaux scalaires et retour

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

Ce juste un lien comme réponse! –

Questions connexes