【发布时间】:2019-02-26 04:53:47
【问题描述】:
我有一个具有一对一自我关系的表来表示层次结构。下面是表格的示意图和一些示例数据:
这是关系的位置模型代码:
class Location extends Model
{
public function location()
{
return $this->hasOne('App\Location');
}
}
我想查询 Locations 表并发送 JSON 响应,如下例所示,但我不确定如何处理查询:
{
"id": 1,
"name": "Country",
"location_id": null
"location": {
"id": 2,
"name": "State",
"location_id": 1
"location": {
"id": 3,
"name": "City",
"location_id": 2
}
}
}
【问题讨论】:
-
这不应该是一对多的关系吗?一个国家可以有很多城市,但一个城市只能在一个国家。查询的方法取决于您真正想要如何播放它,如果您可能有数百万条记录,您是否要加载所有记录并全部显示?也许您只想显示这么多级别,或者只是直系子级?有很多不同的方法可以做到这一点,所以答案真的取决于你想要什么。
-
预期深度是多少? 2、4、10、20 级?
-
@Jonathon 这只是一个例子我确信我的项目只需要一个线性层次结构
-
@Kyslik 深度将是动态的,可以嵌套任意数量的位置
-
你愿意使用 PostgresSQL 吗?我怀疑(谁知道)你可以在 Eloquent 本身中做到这一点,你可以试试en.wikipedia.org/wiki/Hierarchical_and_recursive_queries_in_SQL 整张桌子会有多少个位置? 1k,100k? 1米?您可以抓取所有位置并在 PHP 中完成。