Doctrine-Query IS NOT NULL仍返回带有NULL列的数据集

时间:2018-08-23 09:42:39

标签: php symfony orm doctrine expression

主义/交响乐项目: 我尝试仅在设置参考的情况下获得结果。 因此该关系的列可以用参考ID填充,如果没有“设置”参考,则可以为null ... im无法排除具有空列的实际数据集

$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'));

am.buyer是对另一个表的引用-它在brands表中实际上是Buyer_id

之后

$data = $qb->getQuery()->execute(null, Query::HYDRATE_SCALAR);

不知道我在这里做什么错

2 个答案:

答案 0 :(得分:2)

问题是我仍在数据库(其他项目)的上下文中思考,但是在使用学说的情况下,有必要在对象的上下文中思考-更具体地讲,实体之间是否存在关系

实际的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');

感谢大家在这段时间里的所有评论和支持

答案 1 :(得分:0)

就我而言

$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