symfony2 doctrine查询否定的位置

时间:2013-03-28 19:35:09

标签: symfony doctrine

我想查询我的所有类别:

$othercategories = $this->getDoctrine()->getRepository('Bundle:Category')->findBy(
  array('language' => $language, 'active' => 1),
  array('sorting' => 'ASC')
);

我想做的是在我的查询中添加另一个参数,我想要所有类别除了具有特定id的一个。所以喜欢:

WHERE id NOT IN ( 2 )

WHERE id <>  2 

我怎样才能实现这一目标?

2 个答案:

答案 0 :(得分:2)

您可以使用像这样的DQL查询

$em = $this->getDoctrine()->getEntityManager();

$query = $em->createQuery( 'SELECT c FROM Bundle:Category c WHERE c.language = :language AND c.active = 1 AND c.id NOT IN ( 2 ) ORDER BY c.language ASC' )
->setParameter('language', $language);

$category= $query->getResult();

抱歉,我无法测试这个,因为我正在使用手机回答这个问题而且我不知道你的实体变量。让我知道你做了什么改变才能使它发挥作用,它会帮助其他人。

有关详情,请查看http://symfony.com/doc/master/book/doctrine.html

您可以在存储库中添加这些查询并重复使用它们。请参阅http://symfony.com/doc/master/cookbook/index.html

上的Cook书

希望这会有所帮助。

答案 1 :(得分:1)

如果您愿意,可以使用此语法

$repository = $this->getDoctrine()->getRepository('Bundle:Category');
$queryBuilder = $repository->createQueryBuilder();

$notInCategoryIds = array(2); // Category ids that will be excluded

$queryBuilder->select('c')
             ->from('Bundle:Category', 'c')
             ->where('c.language = :language')->setParameter('language', $language)
             ->andWhere('c.active = :active')->setParameter('active', 1)
             ->andWhere($queryBuilder->expr()->notIn('c.id', $notInCategoryIds)
             ->orderBy('c.sorting', 'ASC');

$results = $queryBuilder->getQuery()->getResult();

对于喜欢这种语法的其他开发人员来说,它可能会更有用