0

我想像这样查询我的所有类别:

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

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

WHERE id NOT IN ( 2 )

或者

WHERE id <>  2 

我怎样才能做到这一点?

4

2 回答 2

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 book

希望这有帮助。

于 2013-03-28T19:49:26.637 回答
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();

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

于 2013-03-28T19:54:32.063 回答