cómo convertir objeto Doctrina en JSON
-
20-09-2019 - |
Pregunta
Estoy utilizando la Doctrina 1.2, cómo podría conseguir el objeto de consulta en JSON / formato de matriz?
$user = Doctrine_Query::create()
->select('u.id, u.username, u.firstname, u.lastname')
->from('User u')
->orderby('u.id')
->execute();
Solución
Una solución podría ser utilizar la método toArray()
en el objeto $user
, para tener una matriz simple que contiene sólo los datos usted está interesado en, y, a continuación, utilizar json_encode
para convertir esa matriz PHP a una cadena JSON.
Algo como esto, supongo:
$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);
(no probado, pero no debe estar demasiado lejos de trabajo ...)
Otros consejos
El problema con $ Registro> exportTo ( 'json') es que va a exportar todos los campos / de record. Y en la mayoría de los casos no es un comportamiento deseable (por ejemplo, cuando esta pieza de JSON se debe pasar al navegador). Una forma de limitar el alcance de la exportación es especificar campos en DQL seleccionar:
$user = Doctrine_Query::create()
->select('u.id, u.name')
->from('User u')
->addWhere('u.id = ?', $id)
->fetchOne();
$user_json = $user->exportTo('json');
$ user_json entonces tendrá algo como esto:
{
"id": 123,
"name": "John Smith",
"password": null,
"deleted": null
}
Por lo tanto, no expone el valor del campo "contraseña", pero hace exponer la estructura de base de datos subyacente. Una vez más, podría no ser lo que queremos. Lo que hago es especificar campos en DQL + seleccione alcanzar un precio de matriz de codificación JSON a continuación:
$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);
En este caso JSON se parecerá a algo como:
{
"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();
No sé por qué el toArray () dará otro campo en la tabla, p.ej. que tendrá el campo "contraseña", parece fetchArray () me puede dar los campos correctos en la consulta.
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
)
Para JSON:
$user->exportTo('json');
; -)
ORM de Doctrine Transformaciones está fuera, que permite convertir a las entidades matrices escalares y la espalda
class User implements ITransformable {
use Transformable;
// ...
echo json_encode($user->toArray());