嵌套在 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 中的重复条目上插入忽略
Symfony4 UnitTest 中的 Doctrine2 orderBy