Doctrine - 使用关系1:N执行select

时间:2015-08-26 12:52:23

标签: symfony doctrine-orm dql

我有许多实体(使用Symfony2 Console 自动生成),在数据库中的结构如下:

enter image description here

生成的实体如下:

$dql = $em->createQuery("SELECT o FROM PanelBundle:Offers o WHERE o.idState = :state");
        $dql->setParameter('state', $this->getUser()->getIdAgency()->getIdZone()->getIdState());
        $offersState = $dql->getResult();

事实证明,我选择属于特定州的投标,我所做的是:

[Semantical Error] line 0, col 43 near 'idState = :s': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.

但是我返回了以下错误:

SELECT o FROM PanelBundle:Offers o JOIN o.idState os WHERE os.id = :state

有没有人想过什么?你知道怎么在这些机构咨询吗?

问候并谢谢

解决:

以下是用于特定州的产品和不属于任何(独立)的所有要约的DQL查询。可能有一种更简单的方法,如果有人知道,你发布它。

SELECT o FROM PanelBundle:Offers o WHERE o.id NOT IN (SELECT x.id FROM PanelBundle:Offers x JOIN x.idState os)

{{1}}

1 个答案:

答案 0 :(得分:1)

你应该加入州表。

$qb
  ->from('PanelBundle:Offers', 'o')
  ->select('o')
  ->join('PanelBundle:States', 's')
  ->andWhere('o.state = :state');
  // ....