Tôi có bảng danh mục. Mỗi thể loại có thể có một phụ huynh tùy chọn (mặc định là 0 nếu không có cha mẹ).Laravel 4 - Eloquent. Trẻ em vô hạn vào mảng có thể sử dụng?
Điều tôi muốn làm là tạo một cây danh sách html đơn giản với các cấp độ của các danh mục.
ngày Ví dụ:
Foods
-- Fruit
---- Apple
---- Banana
---- Orange
-- Veg
---- Cucumber
---- Lettuce
Drinks
-- Alcoholic
---- Beer
---- Vodka
Misc
-- Household Objects
---- Kitchen
------ Electrical
-------- Cooking
---------- Stove
---------- Toaster
---------- Microwave
Lưu ý rằng điều này cần phải làm việc cho khoảng 10 'mức'. Tôi muốn nó là vô hạn nhưng tôi thực sự không muốn đi xuống con đường của việc sử dụng một mô hình tập lồng nhau vì nó sẽ gây ra sự chậm trễ rất lớn về dự án này.
Tài liệu về điều này cho ấu trùng là khủng khiếp, không có tham chiếu thực sự về nơi bắt đầu. Tôi đã chơi với nó trong nhiều ngày cố gắng để làm việc ra phải làm gì và dường như nhận được hư không mà không có một khối lộn xộn rất lớn cho mỗi vòng trong mỗi 10 lần khác.
Tôi đã có cây của tôi về dữ liệu bằng cách sử dụng sau đây trong mô hình của tôi:
<?php
class Item extends Eloquent {
public function parent()
{
return $this->hasOne('Item', 'id', 'parent_id');
}
public function children()
{
return $this->hasMany('Item', 'parent_id', 'id');
}
public function tree()
{
return static::with(implode('.', array_fill(0,10, 'children')))->where('parent_id', '=', '0')->get();
}
}
này được tất cả phụ huynh và trẻ em lên đến một mức độ 10 này hoạt động tốt, nhưng bạn không thể thực sự thì đừng bất kỳ thứ gì có dữ liệu con mà không có 10 vòng lặp foreach theo cách thủ công.
Tôi đang làm gì sai ở đây? Chắc chắn đây không phải là điều này khó khăn/kém thực hiện? Tất cả những gì tôi muốn làm là lấy một danh sách html đơn giản với các mục trong cấu trúc cây.
tôi đã đặt cùng một ví dụ SQLFiddle nhanh chóng của các dữ liệu giả sử dụng trên: http://sqlfiddle.com/#!2/e6d18/1
Bộ lồng nhau thực sự đơn giản hơn. Ngoài ra, có một số gói hiện có, như [Bộ lồng tổ hợp của Cartalyst] (http://docs.cartalyst.com/nested-sets-2) hoặc [Baum] (https://github.com/etrepat/baum). –
Jason, lợi thế của bộ lồng nhau so với câu trả lời được chấp nhận là gì? Tôi phải quyết định giữa hai người. Và với Baum, có vẻ như không có cách nào để lấy cây đó, trừ khi bạn sử dụng câu trả lời được chấp nhận là tốt. – kJamesy