【发布时间】:2016-04-07 09:03:01
【问题描述】:
我正在创建一个食物菜单,管理员可以通过拖放来订购/排序。该菜单由多个类别(ProductCategory)和产品(Product)组成。
我在客户端使用 HTML5Sortable 以允许嵌套 d&d。标记非常简单:
<div class="categories">
@foreach($categories as $category)
<div class="category">
@foreach($category->products as $product)
<div class="products">
<div class=""product" data=id="{{ $product->id }}">
{{ $product->name }}
</div>
</div><!-- /products !-->
@endforeach
</div><!-- /category !-->
@endforeach
</div>
以及对应的javascript:
$('.categories').sortable({
items: '.category'
});
$('.products').sortable({
items: '.product'
});
// Will be called when the user is done repositioning the products and categories
function getOrderedList() {
var data = {};
$('.categories').find('.category').map(function(i) {
var category = $(this);
data[i] = {};
data[i].id = category.data('id');
data[i].products = category.find('.product').map(function() {
return $(this).data('id');
}).get();
});
data = JSON.stringify(data); // Send data to server
}
函数getOrderedList 将向 Laravel 发送一个 JSON 字符串,其中包含排序后的类别 ID 和产品 ID:
{"0":{"id":1,"products":[2,3,1,4,5,6,7,8,9,10]},"1":{"id":2,"products":[11,12,13,14]},"2":{"id":3,"products":[15,16,17,18]}}
如何在后端进行这项工作?我想我必须将此数组存储在数据库中的某个位置,然后按 id 查找和排序模型?
简而言之:什么是排序(嵌套)模型(在 Laravel 中)的简洁灵活的解决方案?
【问题讨论】:
标签: laravel model drag-and-drop eloquent sorted