我正在开发一个 Doctrine/Symfony 项目,并且仅在设置了引用的情况下才尝试检索结果。关系的列可以用引用 ID 填充,或者如果没有“设置”引用,则该列可以为空。目前,我无法排除具有空列的数据集。
$qb = $this->em->createQueryBuilder();
$qb->select('am', 'lb')->from('MyBundle:Brand', 'am')
->leftJoin('MyBundle:XBuyer', 'lb')
->where('lb.id = am.buyer')
->andWhere('am.buyer IS NOT NULL');
我尝试过的另一种格式:
$qb->select('am', 'lb')->from('MyBundle:Brand', 'am')
->leftJoin('MyBundle:XBuyer', 'lb')
->where('lb.id = am.buyer')
->andWhere('am.buyer != :buyer_id_val')
->setParameter('buyer_id_val', '');
还有
$qb->select('am', 'lb')->from('MyBundle:Brand', 'am')
->leftJoin('MyBundle:XBuyer', 'lb')
->where('lb.id = am.buyer')
->andWhere($qb->expr()->isNotNull('am.buyer'));
买家是对另一个表的引用 - 它是品牌表中的
buyer_id
,后面是:
$data = $qb->getQuery()->execute(null, Query::HYDRATE_SCALAR);
不知道我在这里做错了什么。
问题是我仍在数据库(其他项目)的背景下思考,但在使用学说的情况下,有必要在对象的背景下思考 - 如果实体之间存在关系,则更具体。
实际的 IS NOT NULL 表达式不是问题 - 问题是实体上的实际 leftJoin 而不是关系“名称”。
$qb->select('am', 'lb')->from('MyBundle:Brand', 'am')
->leftJoin('am.buyer', 'lb')
->where('am.buyer IS NOT NULL')
->andWhere('lb.id = am.buyer');
感谢大家在这段时间内的所有评论和支持
就我而言,
$qb = $this->em->createQueryBuilder();
生成:
Too few arguments to function Doctrine\ORM\EntityRepository::createQueryBuilder()…
我终于写道:
$qb = $this->em->createQueryBuilder('am');
$qb->select('am')
->leftJoin('am.buyer', 'lb')
->where('lb.id = am.buyer')
->andWhere('am.buyer IS NOT NULL');
->orderBy('am.id', 'ASC')
->setMaxResults(30)
->getQuery()
->getResult()
;
效果很好!
注意:使用 Symfony 4.2.3