Doctrine 2 - 查找存储库中的所有实体,但具有特定id值的实体除外

时间:2011-07-24 10:13:53

标签: php doctrine-orm

我正在使用Doctrine 2。

我想获取实体类的所有实体,除了id = 0的实体。

我可以像这样使用QueryBuilder:

// $em is EntityManager
$em->createQueryBuilder()
       ->select('c')
         ->from('Category', 'c')
           ->where('c.id <> 0')
             ->getQuery()
               ->getResult();

但是看看这段代码,对于这么简单的任务感觉太过分了。 我很想知道Doctrine中是否还有其他更简单的方法可以做到这一点。

3 个答案:

答案 0 :(得分:5)

不,你应该怎么做。您可以省略查询构建器并传递整个DQL查询:

$em->createQuery("SELECT c FROM Category c WHERE c.id != 0")->getResult();

答案 1 :(得分:0)

传递ID号不是更好的做法,你可以像这样传递Category对象:

public function findAllExcept($category) {
    $qb = $this->createQueryBuilder('Category');
    $qb->add('select', 'c')
       ->add('from', 'Category c')
       ->add('where', 'c != :category')
       ->setParameter('category', $category);
    return $qb->getQuery()->getResult();
}

答案 2 :(得分:0)

对于比较和条件,我建议也使用Doctrine。如果在数据库之间切换,例如从MySQL切换到PostgreSQL,它将节省您的时间:

$this->createQueryBuilder()
    ->select('c')
    ->from('Category', 'c')
    ->where($qb->expr()->neq('c.id', '?1'))
    ->setParameter('1', $category)
    ->getQuery()
    ->getResult()