Laravel 8 アプリでClosureTableを使いたいです。私は指示に従ったので、nodes と node_closure という名前の 2 つのテーブルがあり、次の構造があります。最初はnodes
テーブルです。
ID | 親ID | 位置 | 削除された_at |
---|---|---|---|
? | ? | ? | ? |
そして、node_closure
テーブルは次のとおりです。
クロージャ_id | 祖先 | 子孫 | 深さ |
---|---|---|---|
? | ? | ? | ? |
例で特定のコードを実行しました:
Node::createFromArray([
[
'id' => 1,
'children' => [
[
'id' => 2,
'childern' => [
['id' => 3],
['id' => 4],
['id' => 5],
]
],
['id' => 3],
]
]
]);
そして、テーブルに次のデータを入力します。
今私が走るとき
$children = Node::find(1)->getChildren();
return $tree = $children->toTree();
それは私に与えます:
[
{
"id": 2,
"parent_id": 1,
"position": 0,
"deleted_at": null
},
{
"id": 3,
"parent_id": 1,
"position": 1,
"deleted_at": null
}
]
そして、次を実行します。
$children = Node::find(2)->getChildren();
return $tree = $children->toTree();
空の配列を返します[]
(パッケージのgithub ページにある例では、複数のノード内でノードを使用することを描写または言及していないため、パッケージでこれが可能かどうかはわかりません)
この例に加えて、次のようなさまざまなことを試しました
$parent = Node::find(1);
$node = Node::find(2);
$parent->addChild($node);
$node = Node::find(3);
$parent->addChild($node);
その後:
$parent = Node::find(2);
$node = Node::find(3);
$parent->addChild($node);
$node = Node::find(4);
$parent->addChild($node);
$node = Node::find(5);
$parent->addChild($node);
しかし、期待どおりには機能しません。私が見たところ、列に対して更新を実行して別の親ノードの子にすると、parent_id フィールドが更新されるだけなので、以前の親子関係への参照が失われ、ノードは親ノードの子ではなくなります。
私が達成しようとしていることを何とか達成することは可能ですか?これは、ノードが複数の親ノードの子ノードになる可能性がある場合に、このモジュールを使用して「多対多の関係」を容易にするためです。
Ps。実際、複数の商人の商人サブ商人を作成したい商人テーブルがあります。誰かがより良いアイデアを持っているなら、それは素晴らしいことです。Laravel の自然なリレーションシップ バインディングに固執したいだけです。