如何将Doctrine对象转换为json

cc9*_*6ai 11 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();
Run Code Online (Sandbox Code Playgroud)

Pas*_*TIN 29

解决方案可能是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);
Run Code Online (Sandbox Code Playgroud)

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

  • 这会处理关系吗? (4认同)
  • 请停止使用``json_encode``!Php 有优秀的序列化库,使用 Symfony + Doctrine,您可以使用``Symfony\Component\Serializer``,使用注释来包含或不包含某些关系。 (2认同)

Tad*_*kas 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');
Run Code Online (Sandbox Code Playgroud)

$ user_json然后会有这样的事情:

{
    "id": 123,
    "name": "John Smith",
    "password": null,
    "deleted": null
}
Run Code Online (Sandbox Code Playgroud)

因此它不公开"密码"字段值,但确实暴露了底层数据库结构.再一次,可能不是我们想要的.我所做的是在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);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,json看起来像:

{
  "id": 123,
  "name": "John Smith"
}
Run Code Online (Sandbox Code Playgroud)