Symfony 检查别名是否存在?

Symfony 检查别名是否存在?,symfony,doctrine-orm,doctrine,symfony-2.3,query-builder,Symfony,Doctrine Orm,Doctrine,Symfony 2.3,Query Builder,如何检查别名是否已定义 没有检查此项的方法 这不起作用,因为我只得到了根别名,没有连接别名 /** @var $query \Doctrine\ORM\QueryBuilder */ $query->getRootAliases() 零件对我来说是另一个无效的选项 $query->getDQLPart() 仅返回“选择、来自等”等部分 这就是我会“忽略”的错误 如何检查别名是否存在?由于您试图使用已定义的别名加入,因此出现此错误 解决方案是检查联接DQL部件。在存储库方法中,您可

如何检查别名是否已定义

没有检查此项的方法

这不起作用,因为我只得到了根别名,没有连接别名

/** @var $query \Doctrine\ORM\QueryBuilder */
$query->getRootAliases()
零件对我来说是另一个无效的选项

$query->getDQLPart()
仅返回“选择、来自等”等部分

这就是我会“忽略”的错误


如何检查别名是否存在?

由于您试图使用已定义的别名加入,因此出现此错误

解决方案是检查联接DQL部件。在存储库方法中,您可以执行以下操作:

$joinDqlParts = $queryBuilder->getDQLParts()['join'];
$aliasAlreadyExists = false;

/* @var $join Query\Expr\Join */
foreach ($joinDqlParts as $joins) {
    foreach ($joins as $join) {
        if ($join->getAlias() === '_user') {
            $aliasAlreadyExists = true;
            break 2;
        }
    }
}

if ($aliasAlreadyExists === false) {
    $queryBuilder->innerJoin('parenttable._user', '_user')

}

因此,只有在尚未加入的情况下才能加入。

您可以使用PHP native
in_array
函数检查数组中是否存在该值

in_array($alias, $qb->getAllAliases())

查询生成器跟踪联接别名,但不公开它们:
getAllAliases
可从Doctrine 2.5获得,适用于遇到此问题的任何其他人
$queryBuilder->getRootAliases()
in_array($alias, $qb->getAllAliases())