Rakesh kumar
Rakesh kumar

Reputation: 609

Laravel 5.6 Nested Categories

I am using Laravel 5.6. I am stuck with the following. The structure of my category model is below.

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 

To obtain children relationship I used the following method on the linkedin\Category model.

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

In my controller,

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

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

Here is my route

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

I am able to fetch the first children using the following code. It shows the following, when I visit the url, http://trump.localhost/parent-2

Child-1- P - 2

However, it doesn't show anything when I visit http://trump.localhost/parent-2/ch-1-p-2

It should show following, but I don't see it.

sCh-1-Ch-1-P- 2

Upvotes: 1

Views: 1079

Answers (2)

Jonas Staudenmeir
Jonas Staudenmeir

Reputation: 25936

You have to adjust your route:

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

And your controller:

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'));
}

Upvotes: 1

Ozal  Zarbaliyev
Ozal Zarbaliyev

Reputation: 638

in model

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

in your controller send category id in argument then find that category;

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

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

in your view

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

for more documentation

Upvotes: 0

Related Questions