как конвертировать объект Doctrine в json - PullRequest
11 голосов
/ 20 декабря 2009

Я использую Doctrine 1.2, как я могу получить объект запроса в формате json / array?

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

Ответы [ 5 ]

29 голосов
/ 20 декабря 2009

Решением может быть использование метода toArray() для объекта $user, чтобы иметь простой массив, содержащий только те данные, которые вам интересны, и затем использовать json_encode для преобразования этого массива PHP в строку JSON.

Что-то вроде этого, я полагаю:

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

(не проверено, но не должно быть слишком далеко от работы ...)

7 голосов
/ 12 сентября 2011

Проблема с $ record-> exportTo ('json') состоит в том, что он экспортирует все поля записи. И в большинстве случаев это нежелательное поведение (например, когда этот кусок json должен быть передан в браузер). Один из способов ограничить объем экспорта - указать поля в DQL select:

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

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

$ user_json будет выглядеть примерно так:

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

Таким образом, он не отображает значение поля «пароль», но предоставляет структуру базовой базы данных. Опять же, может быть не то, что мы хотим. Что я делаю, так это задаю поля в DQL, выбираю + извлекаю как массив, затем кодирую 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);

В этом случае json будет выглядеть примерно так:

{
  "id": 123,
  "name": "John Smith"
}
1 голос
/ 06 декабря 2010

Для JSON:

$user->exportTo('json');

; -)

1 голос
/ 20 декабря 2009
$users2 = Doctrine_Query::create()
->select('u.id, u.username, u.firstname, u.lastname')
->from('User u')
->orderby('u.id');
$tmp2 = $users2->fetchArray();

Я не знаю, почему toArray () даст другое поле в таблице, например у него будет поле «пароль», fetchArray () может дать мне правильные поля в запросе.

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 голосов
/ 20 ноября 2016

Сейчас Doctrine ORM Transformations отсутствует, оно позволяет преобразовывать сущности в скалярные массивы и обратно

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