gpt4 book ai didi

php - 学说 DQL JOIN

转载 作者:可可西里 更新时间:2023-11-01 00:06:40 24 4
gpt4 key购买 nike

我将以下实体映射到 Doctrine 2 :

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

基本上,一个区域有一个父区域,因此也有一个子区域。因为 child 自己可能有 child ,所以每个 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 = ?;

是否可以使用 Doctrine DQL 来做到这一点,而无需在 Zone 上添加 $restaurants 属性,并且不必无用地复杂化域模型?

最佳答案

好吧,我终于找到了一种只使用 JOIN 的方法(在 MySQL 上明显更快):

SELECT r
FROM Restaurant r,
Zone z
JOIN z.descendants d
WHERE r.zone = d
AND z = ?1;

关于php - 学说 DQL JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com