Вы можете использовать прослушиватели событий. Подробнее о них читайте в документации доктрины: Прослушиватели событий
В symfony 1.4 можно изменить sfGuardUser. По умолчанию это в lib / model / doctrine / sfDoctrineGuardPLugin / sfGuardUser.class.php. Вы можете добавить следующий метод preDqlSelect () для изменения запроса. Обратите внимание, что это не проверено.
class sfGuardUser extends PluginsfGuardUser
{
public function preDqlSelect($event)
{
$params = $event->getParams();
$query = $event->getQuery();
$alias = $params['alias'] . '.Profile';
if ((!$query->isSubquery() || ($query->isSubquery() && $query->contains(' ' . $params['alias'] . ' '))) && !$query->contains($alias))
{
$query->innerJoin($alias);
}
}
}
Чтобы это работало, вам нужно включить обратные вызовы DQL. Вы можете сделать это в вашем классе ProjectConfiguration:
class ProjectConfiguration extends sfProjectConfiguration
{
public function configureDoctrine(Doctrine_Manager $manager)
{
$manager->setAttribute(Doctrine_Core::ATTR_USE_DQL_CALLBACKS, true);
}
}