嵌套在 Doctrine2 中的位置

Posted

技术标签:

【中文标题】嵌套在 Doctrine2 中的位置【英文标题】:Nested Where In in Doctrine2 【发布时间】:2016-05-26 06:28:36 【问题描述】:

我想在 Doctrine 2 中创建这个语句:

SELECT Id, ParentId , LastName
  FROM Customer
 WHERE ParentId IN 
       (SELECT Id 
          FROM Customer
          WHERE ParentId IN $id)
       ) 

这是我的代码:

    public function findByCustomer($id) : array
    
    $qb = $this->_em->createQueryBuilder();
    $qb1 = $this->_em->createQueryBuilder();

    $qb->select('Customer.Id , Customer.ParentId ,  Customer.LastName ');
    $qb->from('..\City\Model\Entities\Customer', 'Customer');       
    $qb->add('where', $qb->expr()->in('Customer.ParentId',

            $qb1->select('Customer.Id');
            $qb1->from('..\City\Model\Entities\Customer', 'Customer');      
            $qb1->add('where', $qb->expr()->in('Customer.ParentId', $id)
            $qb1 = $qb1->getQuery();
            return $qb1->getResult();               

        )
    );
    $qb = $qb->getQuery();
    return $qb->getResult();

但它根本不起作用。有什么建议吗?

【问题讨论】:

【参考方案1】:

您可以像这样通过 querybuilder 生成子查询:

$subQuery = $this->_em->createQueryBuilder();
$subQuery->select('c1.Id');
$subQuery->from('..\City\Model\Entities\Customer', 'c1');      
$subQuery->add('where', $qb->expr()->in('c1.ParentId', $id)


$qb = $this->_em->createQueryBuilder();

$qb->select('Customer.Id , Customer.ParentId ,  Customer.LastName ');
$qb->from('..\City\Model\Entities\Customer', 'Customer');       

$qb->andWhere($qb->expr()->in('Customer.ParentId',  $subQuery->getDQL()) );


$query = $qb->getQuery();
return $query->getResult();

希望有帮助

【讨论】:

【参考方案2】:

我有另一种方式来执行这个查询,希望对你有所帮助。 您可以像这样在doctrine2中使用直接sql语句

$sql = "SELECT Id, ParentId , LastName
  FROM Customer
 WHERE ParentId IN 
       (SELECT Id 
          FROM Customer
          WHERE ParentId IN $id)
       )";
 $data = $this->doctrine->sql_conn->fetchAll($sql , array());

我在doctrine2中总是用这个写复杂的sql语句。希望对你有帮助

【讨论】:

以上是关于嵌套在 Doctrine2 中的位置的主要内容,如果未能解决你的问题,请参考以下文章

在 Doctrine2/Symfony2 中的重复条目上插入忽略

守护程序中的 Doctrine2 连接超时

Symfony4 UnitTest 中的 Doctrine2 orderBy

Symfony 4:调用 getter 后,Doctrine2 LAZY Fetch Collection 仍然为空

Symfony2 项目中的 Doctrine2 映射问题

Doctrine2 中的条件关联