Reputation: 609
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
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
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
Upvotes: 0