我想查询我的所有类别:
$othercategories = $this->getDoctrine()->getRepository('Bundle:Category')->findBy(
array('language' => $language, 'active' => 1),
array('sorting' => 'ASC')
);
我想做的是在我的查询中添加另一个参数,我想要所有类别除了具有特定id的一个。所以喜欢:
WHERE id NOT IN ( 2 )
或
WHERE id <> 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();
对于喜欢这种语法的其他开发人员来说,它可能会更有用