class Zone
{
/**
* @ManyToOne(targetEntity="Zone", inversedBy="children")
* @var Zone
*/
protected $parent;
/**
* @OneToMany(targetEntity="Zone", mappedBy="parent")
* @var Zone[]
*/
protected $children;
/**
* @ManyToMany(targetEntity="Zone")
* @var Zone[]
*/
protected $descendants;
}
class Restaurant
{
/**
* @ManyToOne(targetEntity="Zone")
* @var Zone
*/
protected $zone;
}
基本的には、ゾーンは子供を親を有するため。子供たちは子供たちを持つかもしれないので、各ゾーンにはすべての子孫のリストも保持されます。
各レストランにはゾーンが割り当てられています。
私がしたいことは、DQL JOINを実行して、特定のゾーン(そのすべての子孫を含む)のすべてのレストランを返すことです。
私は、プレーンSQLでこれをしなければならなかった場合は、私が書くでしょう:
SELECT r.* from Zone z
JOIN ZoneDescendant d ON d.zoneId = z.id
JOIN Restaurant r ON r.zoneId = d.descendantId
WHERE z.id = ?;
ゾーンに$restaurants
プロパティを追加して、ドメインをcomplexifyすることなく、教義DQLでこれを行うには、それが可能ですモデルは役に立たない?私は、単一のDQLクエリでこれを行うと考えることができ
ええ、それはずっと良い、あなたがより良い解決を見つけてうれしい!良いアイデア :) – Diego