2017-08-17 7 views
0

を特定のOrganizationから取得するためにクエリを実行しようとしていますが、空の結果を返します...(データベースにデータがあります) Repos組織はMany to Manyの関係です。Symfony/Doctrine:子アトリビュートによるクエリのフィルタ

ここReposエンティティの:

/** 
* Repos 
* 
* @ORM\Table(name="repos") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\ReposRepository") 
*/ 
class Repos 
{ 

    ... 

    /** 
     * 
     * @ManyToMany(targetEntity="Organization", inversedBy="repos") 
     * 
     */ 
    protected $orgs; 

    ... 

はここOrganizationエンティティの:

/** 
    * Organization 
    * 
    * @ORM\Table(name="organization") 
    * @ORM\Entity(repositoryClass="AppBundle\Repository 
    * \organizationRepository") 
    */ 
    class Organization 
    { 
     ... 

     /** 
     * 
     * @ORM\ManyToMany(targetEntity="Repos", mappedBy="orgs") 
     * 
     */ 
     protected $repos; 

     ... 
    } 

はここQueryBuilderRepositoryです:

/** 
* ReposRepository 
* 
* This class was generated by the Doctrine ORM. Add your own custom 
* repository methods below. 
*/ 
class ReposRepository extends \Doctrine\ORM\EntityRepository 
{ 

    public function findReposByName($name){ 
     $qb = $this->createQueryBuilder('r'); 

     // Build query 
     $qb->select('r') 
      ->andWhere(
       ':searchName MEMBER OF r.orgs' 
      ); 
     $qb->setParameter('searchName',$name); 
     return $qb->getQuery()->getResult(); 
    } 

} 

$nameは、ORの名前ですが、私は同じ組織名ですべてのレポを取得したいと思っています。

答えて

2

組織のname属性でフィルタリングする場合は、結合クエリを実行する必要があります。

クエリビルダで

DQLで
public function findReposByName($name){ 
    $qb = $this->createQueryBuilder('r'); 
    $qb->select('r') 
     ->join('r.orgs', 'o') 
     ->where('o.name = :searchName') 
     ->setParameter('searchName', $name); 
    return $qb->getQuery()->getResult(); 
} 

public function findReposByName($name){ 
    $dql =<<<EOF 
     SELECT r 
     FROM AppBundle:Repos r 
     INNER JOIN r.orgs o 
     WHERE o.name = :searchName 
EOF; 
    return $this->_em 
       ->createQuery($dql) 
       ->setParameter('searchName',$name) 
       ->getResult(); 
} 

+0

WOWW、それは動作します!私は数日前に解決策を見ましたが、私はCreateQueryBuilderと同じ結合のエイリアスを入れました!それがうまくいかない理由です!ありがとうございました! – HessianMad

関連する問題