Laravel 5.6嵌套类别

时间:2018-04-17 07:03:02

标签: php laravel eloquent

我使用的是Laravel 5.6。我坚持以下。我的类别模型的结构如下。

id  | name              | cat_parent_id | slug
--- | ------------------| ------------- | ------------- 
1   | Parent - 1        | NULL          | parent-1 
2   | Parent - 2        | NULL          | parent-2 
3   | Child-1- P - 1    | 1             | ch-1-p-1 
4   | Child-1- P - 2    | 2             | ch-1-p-2 
5   | sCh-1-Ch-1-P- 2   | 4             | sch-1-ch-1-p-2 

为了获得子关系,我在kblinked \ Category模型上使用了以下方法。

public function children()
{
  return $this->hasMany('kblinked\Category', 'cat_parent_id', 'id');
}

在我的控制器中,

public function category(Category $category)
{
    $categories = $category->first()->children;

    return view('product.list', compact('categories'));
}

这是我的路线

Route::get('/{category?}','ProductController@category');

我可以使用以下代码获取第一个孩子。当我访问网址http://trump.localhost/parent-2

时,它会显示以下内容

Child-1- P-2

但是,当我访问http://trump.localhost/parent-2/ch-1-p-2

时,它没有显示任何内容

它应该显示以下,但我没有看到它。

sCh-1-Ch-1-P-2

2 个答案:

答案 0 :(得分:1)

您必须调整路线:

Route::get('{category1}/{category2?}/{category3?}/{category4?}',
    'ProductController@category');

你的控制器:

public function category(Category $category1, Category $category2 = null,
        Category $category3 = null, Category $category4 = null) {
    $category = collect(func_get_args())->filter()->last();

    $categories = $category->children;

    return view('product.list', compact('categories'));
}

答案 1 :(得分:0)

在模型中

public function children()
{
  return $this->hasMany('kblinked\Category', 'cat_parent_id');
}

在你的控制器中发送参数中的类别id然后找到该类别;

public function category($category) // $category is id of category
{
    $category = Category::findOrFail($category);

    return view('product.list', compact('categories'));
}
在您的视图中

@foreach($category->children as $child)
  {{$child->name}}
@endforeach

for more documentation