2012-01-07 22 views
5

Tôi đang cố gắng sao chép ví dụ từ gedmo nested-set mở rộng blog, nơi có nhiều nút cha. Ở đó, bạn có thể tạo nhiều nút di động cha mẹ cũng như trẻ em (điển hình là nested set­Wikipedia).Di chuyển nút "gốc" hoặc nút cha - tiện ích mở rộng Doctrine NestedSet

Đọc phần nhận xét máng, lời khuyên chung là xóa @Gedmo\TreeRoot annotation/mapping, nhưng nếu tôi làm điều đó, tôi có thể di chuyển nút gốc, nhưng cây bị hỏng đặc biệt là id trái và phải. Nếu tôi giữ TreeRoot và cố gắng di chuyển các nút gốc, tôi sẽ nhận được "không có nút anh chị em" hoặc điều gì đó dọc theo các dòng đó, như mong đợi.

Xem ví dụ trực tiếp tại blog tiện ích, bạn có thể thấy rằng bạn có thể tạo danh mục mà không cần cha mẹ và di chuyển lên hoặc xuống.

My Category thực thể - các bộ phận có liên quan:

class Category 
{ 
    /** 
    * @Gedmo\TreeLeft 
    * @ORM\Column(name="lft", type="integer") 
    */ 
    private $lft; 

    /** 
    * @Gedmo\TreeLevel 
    * @ORM\Column(name="lvl", type="integer") 
    */ 
    private $lvl; 

    /** 
    * @Gedmo\TreeRight 
    * @ORM\Column(name="rgt", type="integer") 
    */ 
    private $rgt; 

    /** 
    * @Gedmo\TreeRoot 
    * @ORM\Column(name="root", type="integer", nullable=true) 
    */ 
    private $root; 

    /** 
    * @Gedmo\TreeParent 
    * @ORM\ManyToOne(targetEntity="Category", inversedBy="children") 
    */ 
    private $parent; 

    /** 
    * @ORM\OneToMany(targetEntity="Category", mappedBy="parent") 
    * @ORM\OrderBy({"lft" = "ASC"}) 
    * @Exclude 
    */ 
    private $children; 
} 

Câu hỏi: Làm thế nào để làm cho nhiều cây gốc (Tôi muốn tránh tạo ra loại giả sẽ được gốc duy nhất, và thêm mọi thứ khác là con của nút đó), và có thể di chuyển các nút gốc lên và xuống?

P.S. Tôi đang ở trên nhánh chủ.

+0

Bạn có tìm thấy giải pháp cho việc này không? – lopsided

+0

@lopsided Cuối cùng tôi đã làm những gì tôi muốn tránh. Thêm danh mục gốc cây "giả" và tất cả các nút gốc khác là con của nút giả. Nó hoạt động, mặc dù có một số nhược điểm, ẩn danh mục giả khi hiển thị danh mục (trong trường hợp của tôi) dưới dạng hoặc khi hiển thị chúng bên trong danh sách không theo thứ tự, vv .. –

+0

Đó là những gì tôi đã làm với bây giờ. Hoạt động tốt cho tôi, nhưng tôi cứ tiếp tục phá cây, không chắc nó có hoàn toàn khỏe mạnh không. – lopsided

Trả lời

-2

Bạn có thể trao đổi id của các nút gốc để sắp xếp lại chúng.

1

Cây sẽ phá vỡ các cập nhật đồng thời, xem tài liệu tree locking. Khi cập nhật cây, nó chạy hai truy vấn cập nhật nguyên tử, lần lượt có thể chạy từ một yêu cầu đồng thời với một trạng thái khác không nhận thức được về những yêu cầu đang được thực hiện. Khi có điều này được bảo hiểm, một cây nên duy trì sự ổn định của nó, tôi đã sử dụng thành công phần mở rộng này cho cây nút 100K - 1M, được dựa trên rễ mặc dù.

Nếu bạn chắc chắn các phanh cây này không liên quan đến đồng thời, hãy mở một vấn đề trên github với mô tả trường hợp sử dụng.

0

Giải pháp của bạn để tạo Danh mục gốc giả là tốt nhất theo quan điểm của tôi. Thế thì rễ thực của bạn sẽ là con cái của gốc giả này.

Để hiển thị toàn bộ cây được sắp xếp theo tên, chỉ cần sử dụng sắp xếp lại chức năng kho lưu trữ trên nút gốc giả của bạn.

Các vấn đề liên quan