我有一个问题。在提出这个问题之前,我已经搜索了很多,但我没有找到任何可行的例子,所以我在这里提出了我的问题。我在同一个表中有一个父子关系的概念,例如,我有这样的表类别:
id int auto_increment primary
name varchar
type varchar
parentid int
现在我想生成具有多级选项的选择框,如:
<select class="category" name="category">
<option value="-1">Select Category</select>
<optgroup value="0" label="Parent Tag">
<option value="1">Child Tag</option>
<option value="2">Child Tag</option>
</optgroup>
<optgroup value="3" label="Parent Tag">
<option value="4">Child Tag</option>
<option value="5">Child Tag</option>
</optgroup>
</select>
我也想生成与上面相同的菜单。
<ul>
<li>Menu 1</li>
<li>
Menu 2
<ul class="dropdown">
<li>Menu 1 of 2</li>
<li>Menu 2 of 2</li>
<li>Menu 3 of 2</li>
</ul>
</li>
<li>Menu 3</li>
<li>
menu 4
<ul class="dropdown">
<li>Menu 1 of 4</li>
<li>Menu 2 of 4</li>
<li>Menu 3 of 4</li>
</ul>
</li>
</ul>
请朋友帮助在laravel 5中实现此功能。此深度不限,可以是2,3,4;用户想要添加的数量。
Model
class Category extends Model{
...
public function parent()
{
return $this->belongsTo('App\Models\Category', 'parentid');
}
public function children()
{
return $this->hasMany('App\Models\Category', 'parentid');
}
}
In Controller
$categories = Category::with('children')->select('name', 'id','parentid')->where('configtype','=','Category')->get();
return view('admin.category.index',['pageTitle' => 'Category', 'configlist' => $categories]);
In view
?
答案 0 :(得分:3)
对于ul
,您可以使用刀片创建递归函数,例如
@include('partials.menu', $items)
然后在那个视图中:
<ul>
{{-- You would have to provide your own logic to decide which class name the ul should have --}}
@foreach($items as $item)
{{ $item->name }}
@if(!empty($item->children)) {{-- Or however you want to check for children --}}
@include('partials.menu', ['items' => $item->children]) {{-- Here I am just telling blade to treat the children as $items where they are passed through --}}
@endif
@endforeach
</ul>
这是使用blade的递归函数的基本实现。
您也可以对select
使用类似的方法。
希望这有帮助!