カテゴリテーブルがあります。各カテゴリは、オプションの親を持つことができます (親がない場合、デフォルトは 0 です)。
私がやりたいことは、カテゴリのレベルを持つ単純な html リスト ツリーを構築することです。
日付の例:
Foods
-- Fruit
---- Apple
---- Banana
---- Orange
-- Veg
---- Cucumber
---- Lettuce
Drinks
-- Alcoholic
---- Beer
---- Vodka
Misc
-- Household Objects
---- Kitchen
------ Electrical
-------- Cooking
---------- Stove
---------- Toaster
---------- Microwave
これは、約 10 の「レベル」で機能する必要があることに注意してください。私はそれが無限であることを望んでいますが、このプロジェクトで大きな遅延が発生するため、ネストされたセットモデルを使用するルートをたどりたくありません.
これに関するlaravelのドキュメントはひどいもので、どこから始めればよいかについての実際の参照はありません。私は何をすべきかを解決しようとして何日もそれをいじっていましたが、相互に 10 回ループする for each の巨大な乱雑なブロックなしではどこにも行けないようです。
モデルで次を使用して、データのツリーを取得しました。
<?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();
}
}
これにより、すべての親と子がレベル 10 まで取得されます。これは正常に機能しますが、相互に 10 個の foreach ループを手動で作成しないと、子データを操作することはできません。
ここで何が間違っていますか?確かに、これはこれほど難しい/不十分に実行されるべきではありませんか? 私がしたいのは、ツリー構造のアイテムを含む単純な html リストを取得することだけです。
上記で使用したダミー データの簡単な SQLFiddle の例をまとめました: http://sqlfiddle.com/#!2/e6d18/1