如何将Doctrine对象转换为json

时间:2009-12-19 23:22:46

标签: php json doctrine doctrine-1.2

我正在使用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 个答案:

答案 0 :(得分:29)

解决方案可能是在$user对象上使用toArray()方法,以获得一个只包含您感兴趣的数据的简单数组,然后使用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);

(未经测试,但距离工作不应太远......)

答案 1 :(得分:7)

$ record-> exportTo('json')的问题在于它将导出所有记录字段。并且在大多数情况下,这不是一个理想的行为(例如,当这个json应该传递给浏览器时)。限制导出范围的一种方法是在DQL中指定字段:

$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 select + fetch中指定字段然后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"
}

答案 2 :(得分:1)

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

我不知道为什么 toArray ()会给表中的其他字段, 例如它将有“密码”字段, 似乎 fetchArray ()可以在查询中为我提供正确的字段。

指定者()

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
        )

答案 3 :(得分:1)

对于JSON:

$user->exportTo('json');

- )

答案 4 :(得分:0)

现在Doctrine ORM Transformations已经出局,它允许将实体转换为标量数组并返回

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