[英]nested set save to database
我正在嘗試使用Laravel應用實現jqTree。
控制器獲取數據並返回視圖:
\n 公共功能index()\n {\n $ categories = Category :: get(['id','name','_lft','_rgt','parent_id'])-> toTree();\n 返回視圖(“ category.index”,[\n '類別'=> $類別\n ]);\n }\n
這是一個視圖(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\n\n }\n$.ajax({ url: 'category', type: 'POST', headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: { data: treeData }, });
這樣可以正確構建樹,並且可以拖放項目。 但是,我想將重新排序的樹保存回數據庫。 這是控制器中的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
您將在$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.