PHP Doctrine toArray проблема

У меня проблема с методом toArray() в Doctrine. Это не понимает моих отношений:

Первый запрос:

$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) для глубокого свойства.

спасибо за любую помощь


person user252849    schedule 28.01.2010    source источник


Ответы (3)


Вы можете создать именованный запрос для этой таблицы со всеми присоединенными отношениями:

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

А затем просто используйте что-то вроде этого:

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

Я считаю, что вам нужно выполнить соединение с запросом. В противном случае он не гидратирует реальные данные.

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

$q->findAll()->toArray(true);
person prodigitalson    schedule 28.01.2010

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

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

Могу ли я добавить ->limit()->offset() в запрос?

Я предполагаю, что если я сначала создам запрос, то findAll будет действовать так же, как правильно выполнить?

person user252849    schedule 28.01.2010
comment
вы должны иметь возможность добавлять все, что действительно для запроса. и да, это просто разные методы достижения одного и того же. Вы даже можете использовать класс таблицы, если хотите, я думаю, сделав что-то вроде Doctrine::getTable('posts')->getQuery('p')->leftJoin('p.RelatedModel1 rm1')->leftJoin('p.RelatedModel2 rm2')->findAll()->toArray(true); - person prodigitalson; 28.01.2010