2017-06-02 110 views
0

我正在使用Symfony 3.2。我有一个名为Site的实体,其中包含与称为Indication的另一个实体的OneToMany关系。 查询不为null symfony/doctrine中的OneToMany关系

class Site 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="IhkBundle\Entity\Indication", mappedBy="site") 
    */ 
    private $indications; 
} 

class Indication 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="IhkBundle\Entity\Site", inversedBy="indications") 
    * @ORM\JoinColumn(name="site_id", referencedColumnName="id") 
    */ 
    private $site; 
} 

我想查询所有sites其中Indications可用。我只得到一个ArrayCollection,我不知道该怎么做。

$sites = $repository->findAll(); 
foreach ($sites as $site) { 
    $site->getIndications(); 
} 

我也试过使用queryBuilder,如this answer

$query = $repository->createQueryBuilder('s'); 
$result = $query->where('s.indications IS NOT NULL') 
    ->getQuery() 
    ->getResult(); 

这引发以下错误:

[Semantical Error] line 0, col 46 near 'indications IS': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected. 

回答

1

看起来这可以通过SQL做一个简单连接,这样的事情应该工作来解决:

$query = $repository->createQueryBuilder('s'); 
$result = $query->select('p') 
    ->join('p.indications', 'i') 
    ->getQuery() 
    ->getResult();