【发布时间】:2022-07-07 23:32:36
【问题描述】:
我正在使用 Laravel 8。目前我的项目中有这个函数来构建一个 json 树,但它是客户端,我想在 json 响应 laravel 端点上制作这个树。
makeTree = (nodes, parentId) => {
return nodes
.filter((node) => node.parent_id === parentId)
.reduce(
(tree, node) => [
...tree,
{
...node,
children: this.makeTree(nodes, node.id),
},
],
[]
);
};
实际上端点像这样返回平面数据:
[{"id":1,"parent_id":null,"value":"Val1"} {"id":2,"parent_id":1,"value":"Val2"} ...]
然后我在makeTree 函数中发送接收到的数组来构建树:
[
{
"id":1,
"parent_id":null,
"value":"Val1",
"children":[
{
"id":2,
"parent_id":1,
"value":"Val2",
"children":[]
},
{
"id":3,
"parent_id":1,
"value":"Val3",
"children":[]
},
]
}
...
]
这是我的模型:
class MyTree extends Model
{
protected $table = 'my_tree';
public $timestamps = true;
protected $fillable = [
'parent_id',
'value',
];
/**
* A child belongs to a parent.
*
* @return MyTree
*/
public function parent()
{
return $this->belongsTo(MyTree::class, 'parent_id');
}
/**
* An Parent has many Children.
* *
* @return MyTree[]
*/
public function children()
{
return $this->hasMany(MyTree::class, 'parent_id');
}
}
你能帮我用php和laravel关系构建makeTree函数服务器端吗?有一种方法可以使用像 makeTree 这样的递归函数吗?
【问题讨论】:
-
你的树有多深?
-
@N69S 我的树没有限制,它是一棵无限大的树