簡體   English   中英

嵌套集保存到數據庫

[英]nested set save to database

我正在嘗試使用Laravel應用實現jqTree。

  1. 控制器獲取數據並返回視圖:

    \n 公共功能index()\n {\n     $ categories = Category :: get(['id','name','_lft','_rgt','parent_id'])-> toTree();\n     返回視圖(“ category.index”,[\n         '類別'=> $類別\n     ]);\n }\n
  2. 這是一個視圖(JavaScript部分):

    \n var data = {!!  $ categories !!};\n\n $( '#樹')。樹({\n         數據:數據,\n         dragAndDrop:是的,\n         onDragStop:handleMove,\n });\n\n 函數handleMove(){\n     var treeData = $('#tree')。tree('toJson');\n\n
     $.ajax({ url: 'category', type: 'POST', headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: { data: treeData }, }); 
    \n\n }\n
  3. 這樣可以正確構建樹,並且可以拖放項目。 但是,我想將重新排序的樹保存回數據庫。 這是控制器中的post方法:

    \n 公共功能存儲(請求$ request)\n {\n   $ data = $ request-> data;\n   $ result =類別:: rebuildTree($ data);\n   ...\n }\n

調用rebuildTree方法后,出現此錯誤:

Type error: Argument 1 passed to Kalnoy\\Nestedset\\QueryBuilder::rebuildTree() must be of the type array, string given

我已經嘗試過:

public function store(Request $request)
{
  $data = $request->data;
  $data = json_decode($request->data);
  $array_data = (array) $data;
  $result = Category::rebuildTree($data);
  ...
}

但是,這返回:

無法將類型為stdClass的對象用作數組

如何獲取傳遞的數據數組,以便可以使用rebuildTree()方法和更新數據庫?

這是dd($request->data):

[{"name":"Storage","id":3,"_lft":17,"_rgt":18,"parent_id":null,"is_open":true,
    "children":[{"name":"Laptops","id":1,"_lft":1,"_rgt":10,"parent_id":null,"is_open":true,
    "children":[{"name":"Monitors","id":2,"_lft":11,"_rgt":16,"parent_id":null,
    "children":[{"name":"IPS","id":5,"_lft":14,"_rgt":15,"parent_id":2}]},
    {"name":"Macbook","id":6,"_lft":2,"_rgt":3,"parent_id":1},
    {"name":"Acer","id":7,"_lft":4,"_rgt":5,"parent_id":1},
    {"name":"New Subcategory Name","id":8,"_lft":6,"_rgt":7,"parent_id":1},
    {"name":"New Subcategory ame","id":9,"_lft":8,"_rgt":9,"parent_id":1}]}]},
    {"name":"Memory","id":4,"_lft":19,"_rgt":20,"parent_id":null}]

另外,要清楚一點:我正在使用jqTree

嵌套集是lazychaser / laravel-nestedset

您將在$request->data;中獲取json $request->data; 您需要使用json_decode()在數組中json_decode()進行解碼,並將第二個參數設置為assoc的true

參見手冊

ASSOC

如果為TRUE,則返回的對象將轉換為關聯數組。

public function store(Request $request)
{
  $result = Category::rebuildTree(json_decode($request->data,True));
  ...
}

如果您需要在$data傳遞它,則像這樣傳遞它。

$data = json_decode($request->data,True);

另外

foreach ($request->data as $value) 
    $array[] = $value->name;

然后像這樣將$array傳遞到查詢中

$result = Category::rebuildTree($array);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM