Есть ли простой способ рекурсивно гидратировать все связанные объекты при выполнении запроса?
Скажем, у меня есть следующие таблицы:
Song Composer Century
Когда я делаю SongPeer::doSelectJoinAll()
только связанные композиторы гидратируются, поэтому, если я тогда сделаю что-то вроде $song->getComposer()->getCentury()
, будет выполнен новый запрос.
Я хочу выполнить только один запрос в БД, поэтому, когда я вызываю $song->getComposer()->getCentury()
в цикле для всех объектов моих песен, он не заканчивается в n дополнительных запросах.
Надеюсь, я понятен 🙂
благодаря
Вы используете Propel 1.2? Тот с креолом?
Если это так, попробуйте реализовать собственный doSelectJoinAll
на SongPeer, чтобы вручную добавить соединение на другую таблицу (например, век).
Если вы используете последнюю версию, вам просто нужно joinWith
таблицу в вашем запросе:
<?php $song = SongQuery::create() ->joinWith('Song.Composer') ->joinWith('Composer.Century'); $century = $song->getComposer()->getCentury();