2017-10-17 49 views
0

我有如下表:的foreach 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(); 
    }); 
} 

,我想它看起來就像一棵樹,但仍然可以使用它在我的UL李下拉列表。 在我的刀,我做到了這一點:

    <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列表和每個get_sub顯示它下它與父UL李裏面UL李書福看起來像這樣:

enter image description here

雖然有時位置得到7個父親,如果我知道父親的號碼,我可以讓while循環多達父親電話號碼,但編譯時我不知道這個數字。

回答

2

你的模型叫什麼?讓我們假設它被命名爲Location。財產在你的選址模型添加你的關係名至$:

protected $with = ['get_sub']; 

在您的控制器(或任何你正在做它),你可以撥打:

$locations = Location::get(); 

你會拿到嵌套列表。但是,如果你的列表過度增長,請注意。每次你從db中獲取一個位置,它都會與它的所有孩子一起出現。因此,請檢查您是否可以動態添加或刪除$ with數組中的'get_sub'項目。

要從孩子開始,您需要在您的位置模型中定義parent()方法,並將其添加到$ with數組中。

protected $with = ['parent']; 

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

$ locations = Location :: withTrashed() - > get(); \t \t return view('locations.create',compact('locations'));這是我的控制器代碼我已經做了你所說的 –

+0

我的問題是我希望它從最後一個孩子不是從父母開始 –