您可以使用事件监听器.在教义文档中阅读有关它们的更多信息:事件监听器
在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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
要使其正常工作,您需要打开DQL回调.您可以在ProjectConfiguration类中执行此操作:
class ProjectConfiguration extends sfProjectConfiguration
{
public function configureDoctrine(Doctrine_Manager $manager)
{
$manager->setAttribute(Doctrine_Core::ATTR_USE_DQL_CALLBACKS, true);
}
}
Run Code Online (Sandbox Code Playgroud)