如何检查别名是否已定义?
没有检查方法。
这不起作用,因为我只有ROOT别名而且没有连接别名。
/** @var $query \Doctrine\ORM\QueryBuilder */
$query->getRootAliases()
这些部件对我来说是另一个无效的选择...
$query->getDQLPart()
仅返回“select,from等”部分。
那就是我会“忽略”的错误。
[Semantical Error] line 0, col 254 near '_user LEFT': Error: '_user' is already defined.
我如何检查别名是否存在?
答案 0 :(得分:10)
您可以使用PHP本机in_array
函数来检查数组中是否存在该值。
in_array($alias, $qb->getAllAliases())
答案 1 :(得分:8)
您收到此错误是因为您尝试使用已定义的别名加入。
解决方案是检查连接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')
}
所以,如果你还没有参加,那么你才加入。