14

我正在使用 Doctrine 1.2,如何将查询对象转换为 json / 数组格式?

$user = Doctrine_Query::create()
->select('u.id, u.username, u.firstname, u.lastname')
->from('User u')
->orderby('u.id')
->execute();
4

5 回答 5

31

一个解决方案可能是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);

(未测试,但应该不会离工作太远......)

于 2009-12-19T23:27:13.880 回答
8

$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"
}
于 2011-09-12T10:15:29.173 回答
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 () 可以在查询中给我正确的字段。

toArray()

Array
(
    [0] => Array
        (
            [id] => 1
            [username] => user1
            [password] => password
            [firstname] => John
            [lastname] => Smith
        )

获取数组()

Array
(
    [0] => Array
        (
            [id] => 1
            [username] => user1
            [firstname] => John
            [lastname] => Smith
        )
于 2009-12-19T23:39:59.193 回答
1

对于 JSON:

$user->exportTo('json');

;-)

于 2010-12-06T12:45:59.280 回答
-1

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

class User implements ITransformable {
    use Transformable;
// ...
echo json_encode($user->toArray());
于 2016-11-20T04:33:17.517 回答