Проблема с $ 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"
}