Doctrine2获取QueryBuilder具有manyToMany关联的行

Woj*_*ski 3 php doctrine query-builder symfony

大家.我有2个实体City和POI.映射看起来像这样:

class City {
/**
 * @ORM\ManyToMany(targetEntity="POI", mappedBy="cities")
 * @ORM\OrderBy({"position" = "ASC"})
 */
protected $pois;
Run Code Online (Sandbox Code Playgroud)

class POI {
/**
 * @ORM\ManyToMany(targetEntity="City", inversedBy="pois")
 * @ORM\JoinTable(name="poi_cities")
 */
protected $cities;
Run Code Online (Sandbox Code Playgroud)

我想使用QueryBuilder获取与某个城市至少有1个关联的所有POI.我应该使用exists()函数,但我不知道如何安静.

gil*_*den 6

你必须得到Left join它们并检查是否cities为空.

$qb->select('p', 'c')
   ->from('AcmeDemoBundle:POI', 'p')
   ->leftJoin('p.cities', 'c')
   ->where('c IS NOT NULL');
Run Code Online (Sandbox Code Playgroud)

我没有对它进行过测试,但我希望它能为您提供总体方向.您可以QueryBuilder这里了解更多相关信息.