我在表中有一些不良数据,但并非所有字段都有空值,如果可能的话,我希望通过实现类似的东西来获得所有错误的行。
$contactObj = $this->em->getRepository("ImporterBundle:Contact")
->findBy([$field1 => null OR $field2 => null OR $field3 => null ...]);
是否有解决方案可以执行上述示例而不使用 repositoryClass ?
答案 0 :(得分:2)
您可以使用 Doctrine \ ORM \ EntityRepository 的匹配(条件$条件)功能:
use Doctrine\Common\Collections\Criteria;
$criteria = $criteria = Criteria::create()
->where(Criteria::expr()->isNull('functions'))
->orWhere(Criteria::expr()->isNull('salutation'))
->orWhere(Criteria::expr()->isNull('category'))
->orWhere(Criteria::expr()->isNull('address'))
->orWhere(Criteria::expr()->isNull('city'))
->orWhere(Criteria::expr()->isNull('company'));
$contactObj = $this->em->getRepository("ImporterBundle:Contact")
->matching($criteria);
答案 1 :(得分:1)
所以我只需要使用存储库类
并使用表达式。
public function getBadData() {
$db = $this->createQueryBuilder('c');
return $db->select('c')
->where($db->expr()->isNull('c.functions'))
->orWhere($db->expr()->isNull('c.salutation'))
->orWhere($db->expr()->isNull('c.category'))
->orWhere($db->expr()->isNull('c.address'))
->orWhere($db->expr()->isNull('c.city'))
->orWhere($db->expr()->isNull('c.company'))
->getQuery()
->getResult();
}
正如JimL建议的那样,我使用 orX()
public function getBadData() {
$db = $this->createQueryBuilder('c');
return $db->select('c')
->where($db->expr()->orX()->addMultiple(
[
'c.functions is null',
'c.salutation is null',
'c.category is null',
'c.address is null',
'c.city is null',
'c.company is null'
]
))
->getQuery()
->getResult();
}
现在应该更具可读性。