PHP Doctrine toArray问题

时间:2010-01-28 18:31:27

标签: php orm doctrine

Doctrine中的toArray()方法存在问题。它没有得到我的关系:

首先查询:

$q = Doctrine::getTable('posts')->find(1);
debug($q->toArray(true));

在没有关系的情况下打印postid = 1

$q = Doctrine::getTable('posts')->find(1);
$q->Tags->toArray();
debug($q->toArray(true));

...使用标记关系打印结果。

但我想这样做:

Doctrine::getTable('posts')->findAll()->toArray(true);

...并获得帖子的所有关系,而不是我有一个帖子行数组。

关于如何使其与关系一起工作的任何想法?

(注意我为深度属性添加了toArray(true)。

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

我相信你需要加入查询。否则它不会保留相关数据。

$q = Doctrine_Query::create()
    ->from('Post p')
    ->leftJoin('p.RelatedModel1 rm1')
    ->leftJoin('p.RelatedModel2 rm2');

$q->findAll()->toArray(true);

答案 1 :(得分:1)

您可以为此表创建一个附加了所有关系的命名查询:

Doctrine::getTable('posts')->addNamedQuery('get.by.id.with.relations', 'DQL here...');

然后只使用这样的东西:

Doctrine::getTable('posts')->find('get.by.id.with.relations', array(123));

答案 2 :(得分:0)

$q = Doctrine_Query::create()
->from('Post p')
->leftJoin('p.RelatedModel1 rm1')
->leftJoin('p.RelatedModel2 rm2');

$q->findAll()->toArray(true);

我可以添加 - > gt; limit() - > offset() 查询?

我认为如果我首先创建查询,那么findAll的行为与执行权相同吗?