【发布时间】:2020-11-26 12:10:41
【问题描述】:
有没有办法在不指定类的完全限定名的情况下编写 DQL 查询?
有没有办法创建以下查询:
return $this->getEntityManager()->createQuery(
'SELECT i
FROM Company\AccountingBundle\Entity\Invoice i
WHERE i.id = :id'
)->setParameter('id', 1)
->getResult();
像这样:
use Company\AccountingBundle\Entity\Invoice;
....
return $this->getEntityManager()->createQuery(
'SELECT i
FROM Invoice i
WHERE i.id = :id'
)->setParameter('id', 1)
->getResult();
或类似的东西。我真的会避免在 DQL 中设置完整的 FQN。
但我没有找到任何“setClass”或其他方法来执行此操作。
编辑上下文
实际上,它是一个 Symfony 项目,查询位于 Repository 类中。我有一个实体的Doctrine XML定义,一个实体和实体存储库也在XML中定义,但我总是需要明确定义FQN,有什么想法吗?
【问题讨论】:
-
可以使用字符串拼接:
$work_class="Company\AccountingBundle\Entity\Invoice"; return $this->getEntityManager()->createQuery( 'SELECT i FROM ' . $work_class . ' i WHERE i.id = :id' )->setParameter('id', 1) ->getResult(); -
别想了,用heredoc或
sprintf构建您的查询字符串,然后将Invoice::class传递给占位符值。 -
另一种方法是使用存储库,因为存储库始终与实体绑定,因此您无需明确声明它们。但我不知道您的应用程序的状态或要求,所以这需要您进行研究。
-
@El_Vanja 感谢您的评论,您是对的,我没有解释上下文!我的错。事实上,它是一个 Symfony 项目,查询位于 Repository 类中。我有一个实体的Doctrine XML定义,一个实体和实体存储库也在XML中定义,但我总是需要明确定义FQN,有什么想法吗?
标签: php symfony doctrine-orm dql