我在symfony中有两个表,通过ManyToOne双向关系连接。 文章和日期。
我有除 a.id :4 以外的所有文章,因为其中一个对条件没有反应。
我找到了解决方案,但我如何理解它?我知道它没有优化。我愿意。
在我的表格(日期)中,我有:
+----------------------------
| id | a.id | OK OR NOT ?
+----------------------------
| 1 | 4 | OK
| 2 | 4 | OK
| 3 | 6 | OK
| 4 | 5 | OK
| 5 | 4 | **NOTOK**
----------------------------
$qb = $this->createQueryBuilder('a');
$allIndispo = $qb
->select('a.id')
->leftJoin('a.dates','d')
->where('**NOTOK**')
->orderBy('a.id', 'ASC')
->getQuery()
->getResult();
$allIndispoId = array();
foreach ($allIndispo as $key => $value) {
foreach ($allIndispo[$key] as $key2 => $value2) {
$allIndispoId[] = $value2;
}
}
$allDispo = $this->createQueryBuilder('a')
->select('a')
->where($qb->expr()->notIn('a.id', "'".implode($allIndispoId, "', '")."'"))
->getQuery()
->getResult();
return $allDispo;
尝试使用第一个查询作为第二个查询的子查询,例如:
$qb = $this->createQueryBuilder('a2'); //We need a different alias here
$allIndispo = $qb
->select('a2.id')
->leftJoin('a2.dates','d')
->where('**NOTOK**') // so take care to change the table alias here also
->orderBy('a2.id', 'ASC');
$allDispo = $this->createQueryBuilder('a')
->select('a')
->where($qb->expr()->notIn('a.id', $subQuery->getDQL()))
->getQuery()
->getResult();
return $allDispo;
希望这个帮助