2017-08-17 65 views
0

我试图执行查询以获得来自特定Organization的所有Repos,但它返回空结果...(我在数据库中有数据!) 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; 

     ... 
    } 

这里的RepositoryQueryBuilder

/** 
* 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是一个或名称我希望获得具有相同组织名称的所有Repos。

回答

2

如果要使用组织的name属性进行筛选,则必须执行联接查询。

通过查询生成器

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(); 
} 

在DQL

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