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();
¿Fue útil?

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());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top