2017-05-15 12 views
0

Laravelでカテゴリのネストされたリストを作成するにはどうすればよいですか? Laravelでカテゴリのネストリストを作成する方法は?

  • ------ Laravel
  • ---------バージョン
    • --- PHPの:

      は、私はこの次の構造のようなものになりたいです

    • ------------シリーズ
    • --- Pythonの
    • ------ジャンゴ
    • --- ルビー
    • ..........

    私のテーブルのフィールド:

    ID | Name | Parent_id 
    

    私は私のテーブルに別の列を追加する必要がある場合教えてください私。あなたが作ることができます。..

    function rec($id) 
    { 
        $models = Category::find($id); 
    
        foreach ($models->children as $chield) { 
          rec($chield->id); 
        } 
    
        return $models->all(); 
    } 
    
    function main() { 
        $models = Category::whereNull('parent_id')->get(); 
    
        foreach ($models as $parent) { 
        return rec($parent->id); 
    } 
    

    答えて

    0

    私はこの問題を解決:

    $traverse = function ($categories) use (&$traverse) { 
         foreach ($categories as $category) { 
          $traverse($cat->Child); 
         } 
        }; 
        $traverse(array ($category)); 
    

    モデルの関係:

    public function Child() 
    { 
        return $this->hasMany($this, 'parent'); 
    } 
    
    public function Parent() 
    { 
        return $this->hasMany($this,'id','parent'); 
    } 
    

    (それは配列を返すためhasManyの関係を用いてI'am)

    1

    をこの次のコードを使用したが、私はそれが横にカテゴリのネストされたリストを作成するための非常によくありませんが、私は私のビューに、この関数を渡すことができないと思います

    I'am自己参照モデル:

    class Category extends Model { 
    
        public function parent() 
        { 
         return $this->belongsTo('Category', 'parent_id'); 
        } 
    
        public function children() 
        { 
         return $this->hasMany('Category', 'parent_id'); 
        } 
    } 
    

    とは、再帰的な関係を作る:

    // recursive, loads all descendants 
    public function childrenRecursive() 
    { 
        return $this->children()->with('childrenRecursive'); 
    } 
    

    をしてPAを取得しますすべての子供と家賃:

    $categories = Category::with('childrenRecursive')->whereNull('parent')->get(); 
    

    最後に、子供がnullになるまで反復する必要があります。あなたが慎重ではない場合、これにはいくつかのパフォーマンス上の問題があることは間違いありません。この方法をそのまま使用する予定のかなり小さいデータセットの場合、それは問題ではありません。これがますます増加するリストになる場合は、root_parent_idなどをクエリして手動でツリーを組み立てることが理にかなっています。

    +0

    これは素晴らしい、THXある:)アーキテクチャは非常に良い、間違いなくメモリを保持するのに役立ちます –

    +1

    私は助けることができてうれしい! –

    関連する問題