gpt4 book ai didi

php - 从多对多关系生成层次结构

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:46:16 25 4
gpt4 key购买 nike

我无法根据 API 使用的数据生成层次结构。

此时,TagNode 两个模型之间存在多对多关系。

现在,我需要在 Tag 模型上设置一个 parent_id 来知道哪个 Tag 是它的父级。这将是递归的,因为有多个深度级别。

问题在于,这个过程需要根据多对多关系的实际数据进行阐述。所以我一直在玩集合 (Node::all()/Tag::all()) 来尝试创建这个结构,然后进行批量分配子标签中父标签的 ID。

我的想法是从 Node 加载标签,然后在集合中为节点的每个标签子节点创建一个新项

所以这样:

|
|__Node A
| |__Tag 1
| |__Tag 2
| |__Tag 3
|
|__Node B
| |__Tag 1
| |__Tag 3
|
|__Node c
|__Tag 1
|__Tag 2

可以转换成这个(我知道每个项目都需要有一个唯一的 key ,我正在考虑分配一个临时的):

|
|__Node A
| |__Tag 1
|
|__Node A
| |__Tag 2
|
|__Node A
| |__Tag 3
|
|__Node B
| |__Tag 1
|
|__Node B
| |__Tag 3
|
|__Node c
| |__Tag 1
|
|__Node c
|__Tag 2

然后我可以 groupBy(递归地)标签键恢复到这个:

|__Tag 1
|
|__Tag 2
| |
| |__Node A
| |__Node C
|
|__Tag 3
|
|__Node A
|__Node B

我的问题是,(还)不知道如何正确地进行这种转换。

最佳答案

使用最佳实践

首先我建议你看看this旅游。作为使用权重制作层次结构数据的最佳实践。

使用 Eloquent

并且当你使用 Laravel Eloquent 关系作为它的活跃记录时

//in Tag Model
public function children()
{
return $this->hasMany('App\Models\Tag', 'parent_id');
}

public function parent(){
return $this->belongsTo('App\Models\Tag', 'parent_id');
}

public function nodes()
{
return $this->hasMany('App\Models\Node', 'node_id', 'node_id');
}

然后就可以得到结果了

//there should be a relation for node also 
Tag::with('parent', 'children.children', 'node')->get();

一个简单的php方式

还有我认为的一种简单的方法:

foreach ($tags as $key => $value) {
$tagTree[$value['tag_id']] = $value;
$tagTree[$value['tag_id']]['child'] = array();
}

foreach ($tagTree as $key => $value) {
if ($value['parent_id'] == 0) {
$root[$key] = &$tagTree[$key];
} else {
$tagTree[$value['parent_id']]['child'][$key] = &$tagTree[$key];
}

//here you can check if is there any node for current tag insert
//$tagTree[$value['parent_id']]['node'][] = ...
}

关于php - 从多对多关系生成层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54713179/

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