Tworzę menu żywności, które administrator może zamówić/posortować, przeciągając i upuszczając. To menu składa się z wielu kategorii (ProductCategory) i produktów (Product).Laravel zapisuje uporządkowaną listę wymownych modeli
Używam HTML5Sortable po stronie klienta, aby umożliwić zagnieżdżone d & d. Znacznik jest dość prosta:
<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>
i odpowiadająca 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
}
Funkcja getOrderedList
wyśle ciąg JSON z powrotem do laravel, który zawiera uporządkowany kategorię identyfikatora i identyfikator produktu:
{"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]}}
Jak mogę to wykonać na zapleczu? Chyba muszę przechowywać tę tablicę gdzieś w bazie danych, a później znaleźć i zamówić modele według identyfikatorów?
W skrócie: Jakie jest czyste i elastyczne rozwiązanie do sortowania (zagnieżdżania) modeli (w ramach Laravel)?
Dziękuję za odpowiedź, ale już to wiedziałem. Chyba szukam rozwiązania polimorficznego, w którym kolumna "Waga" nie byłaby przechowywana w samym modelu produktu, więc dziękuję za wskazanie tego. – JasonK
Będę edytować odpowiedź, aby uwzględnić rozwiązanie polimorficzne w nieco –