【发布时间】:2020-02-03 18:03:40
【问题描述】:
我想解决这个问题。我有一个这样的json:
[
{
"id": 2,
"title": "One",
"parent": {},
"children": [
{
"id": 3,
"title": "One One",
"parent": {
"id": 2,
"title": "One"
},
"children": [],
"value": 1
},
{
"id": 4,
"title": "One Two",
"parent": {
"id": 2,
"title": "One"
},
"children": [],
"value": 2
}
],
"value": 3
},
{
"id": 5,
"title": "Three",
"value": 3
}
]
如您所见,每个项目可以有一个孩子,也可以有一个孩子,也可以有一个孩子等等。它是嵌套的。
现在我想将这些items 和每个孩子保存在与枢轴的belongsToMany 关系中(在本例中:value)。如果我想使用sync(),我必须在我的控制器中准备好我的所有项目:
<?php
/*Save $items*/
$items
= collect($request->input('data.items'))->mapWithKeys(function (
$item
) {
if (array_key_exists('value', $item)) {
$value = $item['value'];
} else {
$value = null;
}
return [
$item['id'] => compact('value'),
];
});
$user->items()->sync($items);
但这不会递归地遍历所有孩子。我想过这样的事情:
/*Save items*/
$items
= collect($request->input('data.items'))->mapWithKeys(function (
$item
) {
$traverse = function ($item) use (&$traverse) {
if (array_key_exists('value', $item)) {
$value = $item['value'];
} else {
$value = null;
}
foreach ($item['children'] as $child) {
$child = $traverse($child);
}
$children = ($item['children']);
return [
$item['id'] => compact('value', 'children'),
];
};
$item = $traverse($item);
但这行不通。
我想要的结果:
- 将每个
item保存为belongsToMany关系,用于user与枢轴value - 使用枢轴
value递归保存所有children
【问题讨论】:
-
你希望你有什么结果?请写下来,以便那些愿意提供帮助的人更容易阅读;)
-
对不起,我补充了缺失的信息,
标签: laravel eloquent laravel-collection