2012-04-06 12 views
12

クエリビルダーを使用して、特定のsuperCategory(カテゴリとsuperCategoryに多対多の関係がある)に属するすべてのカテゴリを選択しようとしています。 ただし、カテゴリカテゴリ内にスーパーカテゴリがないため、カテゴリからスーパーカテゴリを参照する方法がわからないため、正しいクエリビルダーセンテンスを作成できません。クエリビルダーが多対多の関係に参加する

データベース内のオブジェクトは、次のようになります。ここでは

Category: 
    id 
    name 

SuperCategory 
    id 
    name 

categories_superCategories 
    id 
    category_id 
    superCategory_id 

は私のオブジェクト(YMLファイル)の定義です:

YOP\YourOwnPoetBundle\Entity\TraitCategory: 
    type: entity 
    repositoryClass: YOP\YourOwnPoetBundle\Repository\TraitCategoryRepository 
    table: null 
    fields: 
    id: 
     type: integer 
     id: true 
     generator: 
     strategy: AUTO 
    name: 
     type: string 
     length: '255' 
    lifecycleCallbacks: { } 
    manyToMany: 
    superCategories: 
     targetEntity: SuperCategory 
     joinTable: 
     name: traitCategories_superCategories 
     joinColumns: 
      traitCategory_id: 
      referencedColumnName: id 
     inverseJoinColumns: 
      superCategory_id: 
      referencedColumnName: id 

YOP\YourOwnPoetBundle\Entity\SuperCategory: 
    type: entity 
    repositoryClass: YOP\YourOwnPoetBundle\Repository\SuperCategoryRepository 
    table: null 
    fields: 
    id: 
     type: integer 
     id: true 
     generator: 
     strategy: AUTO 
    name: 
     type: string 
     length: '255' 
    lifecycleCallbacks: { } 
    manyToMany: 
    msgCategories: 
     targetEntity: MsgCategory 
     mappedBy: superCategories 
    traitCategories: 
     targetEntity: TraitCategory 
     mappedBy: superCategories 

どのように建設します特定のsuperCategoryに属するカテゴリを取得するためのクエリビルダーの文章?

私CategoryRepository内部クエリ:

$this->createQueryBuilder('c') 
      ->innerJoin(??????) 
      ->setParameter('superCategoryName', $superCategoryName); 

は...のような

答えて

27

はそれを手に入れた:

public function findBySuperCategoryName($superCategoryName) 
{ 
    return $this->createQueryBuilder('c') 
      ->innerJoin('c.superCategories', 's', 'WITH', 's.name = :superCategoryName') 
      ->setParameter('superCategoryName', $superCategoryName); 
} 

問題があることでした私は持っていたc.superCategoriesではなくc.superCategoriesを要求する!

2

何かありがとう:

$this->createQueryBuilder() 
     ->select('s') 
     ->from('SuperCategory', 's') 
     ->innerJoin('s.Category c ON c.category_id = s.superCategory_id') 
     ->where('s.name = :superCategoryName') 
     ->setParameter('superCategoryName', $superCategoryName) 
     ->getQuery() 
     ->getResult();