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のクックブックを参照してください

これが役に立ったことを願っています。

于 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 に答える