json içine Doktrin nesneyi dönüştürmek için nasıl

4 Cevap php

Ben nasıl json / dizi biçime sorgu nesnesini alabilir, Doktrini 1.2 kullanıyorum?

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

4 Cevap

Bir çözüm kullanmak json_encode toArray() method on the $user nesne, ilgilenen sadece veri youre içeren basit bir dizi var kullanmak, ve olabilir a> JSON dizeye o PHP dizi dönüştürmek.

Böyle bir şey, herhalde:

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

(Not tested, but it should not be too far from working...)

Ile Trouble $record->exportTo('json') o all kayıt alanları ihraç edecek olmasıdır. Ve çoğu durumda (json bu parça tarayıcınıza iletilmesi gereken örn) bir arzu davranış değil. Ihracat kapsamını sınırlamak için bir yolu DQL seçmek alanları belirtmek için:

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

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

$ User_json sonra böyle bir şey olacak:

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

So it does not expose "password" field value but does expose underlying database structure. Again, might not be what we want. What I do is specify fields in DQL select + fetch as array then json encode:

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

Bu durumda, json gibi bir şey gibi görünecektir:

{
  "id": 123,
  "name": "John Smith"
}
$users2 = Doctrine_Query::create()
->select('u.id, u.username, u.firstname, u.lastname')
->from('User u')
->orderby('u.id');
$tmp2 = $users2->fetchArray ();

I don't know why the toArray() will give the other field in the table, e.g. it will have the "password" field, it seems fetchArray() can give me the correct fields in 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
        )

JSON için:

$user->exportTo('json');

;-)