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
속성을 추가하지 않고, 교리 DQL이 작업을 수행하는 것이 가능하고, 도메인을 complexify 필요 모델 쓸데없이? 나는 하나의 DQL 쿼리에이 일을 생각할 수
네, 그게 훨씬 나아 졌어요, 당신이 더 나은 해결책을 찾았 기 때문에 기쁩니다! 좋은 생각 :) – Diego