2017-10-17 8 views
0

ように私は以下の表を持っている:foreachのUL李無限遠状態

私はそれが木のように見えるが、それでもドロップダウンリスト私のUL李にそれを使用することができるようにしたい
public function up() 
{ 
    Schema::create('locations', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('location_name',50); 
     $table->integer('location_id')->unsigned(); 
     $table->foreign('location_id')->references('id')->on('locations');   
     $table->softDeletes(); 
     $table->timestamps(); 
    }); 
} 

。 私の刃の内側に、私は、このやった:

    <ol> 
         @foreach($locations->where('location_id','=',null) as $location) 
          <li draggable='true'> 
           {{$location->location_name}} 
           <ol> 
           @foreach($location->get_sub as $location_sub) 
            <li draggable='true'>{{$location_sub->location_name}}</li> 
           @endforeach 
           </ol> 
          </li> 
         @endforeach 
        </ol> 

$、場所に> get_subすることは、私は、親/子の位置に達することができるようにすることで関係

public function get_sub() 
{ 
    return $this->hasMany('App\Location','location_id','id'); 
} 

するためのモデル 内の関数です。しかし、時々私は要素の親の子供の孫 - グランド孫などが必要です これを行う私の考えはすべての子の場所と を探すためにwhileループを作成し、それらをul liリストとすべてのget_subに表示することですそれこのようなルックスに親UL李内側のUL Liと:場所は7人の父親を取得し、私は父親の数を知っていれば、私は父親番号などなど、多くのためにループしながら作ることができますがたまに

enter image description here

が、私はコンパイル時にその数を知らない。

答えて

2

あなたのモデルはどのように呼び出されますか?場所に名前が付けられているとします。あなたの関係の名前は、あなたの場所のモデル内のプロパティと$に入れる:あなたのコントローラで

protected $with = ['get_sub']; 

(またはどこでもそれをやっている)あなたが呼び出すことができます。

$locations = Location::get(); 

あなたはそのネストされたリストを取得します。しかし、あなたのリストがあまりにも大きくなる場合は注意してください。 dbから場所を取得するたびに、すべての子が付属します。だから、あなたが$ with配列からその 'get_sub'項目を動的に追加または削除できるかどうかを確認してください。

子から開始するには、Locationモデルでparent()メソッドを定義し、それを$ with配列に追加する必要があります。

protected $with = ['parent']; 

public function parent() 
{ 
    return $this->belongsTo('App\Location', 'location_id', 'id'); 
} 
+0

$ locations = withTrashed() - > get(); \t \t戻るビュー( 'locations.create'、compact( 'locations'));これは私のコントローラコードです私はすでに何を言ったか –

+0

私の問題thats私は親からではなく、最後の子から開始したい –

関連する問題