在PDO/SQL中,我有一个带有"大于"的简单查询:
DELETE * FROM tablexyz WHERE access > :old
条令2 ORM中的等价物是什么?
我已经写了一个小代码:
$criteria = ['access'=>$old];
$dataRepo = $entityManager->getRepository('tablexyz')->findBy($criteria)->delete();
我的问题是,我想在Doctrine 2 ORM中使用大于运算符,但我不想为此生成函数或类。有人知道更好或更短的解决方案吗?
您可以使用查询生成器og,只需对其执行直接DQL(或SQL)查询。
$qb = $entityManager->createQueryBuilder();
$qb->select('e')
->from('Entityxyz', 'e')
->where('e.access > :old')
->setParameter('old', $old);
$entities = $qb->getQuery()->getResult();
或
$query = 'SELECT e FROM AppBundleEntityEntityxyz WHERE e.access > :old';
$entities = $entityManager->createQuery($query)
->setParameter('old', $old)
->getResult();`
我建议你为它创建一个存储库方法,这是正确的位置。在存储库中使用查询生成器也更简单,因为它知道你引用的是哪个实体(并且可以跳过调用select和from)
class EntityxyzRepository extends EntityRepository
{
public function getNewerThan($newerThan)
{
$qb = $this->createQueryBuilder('e');
$qb->where('e.access > :newerThan')
->setParameter('newerThan', $newerThan);
return $qb->getQuery()->getResult();
}
}