我的Productcategory.php有
public function products()
{
return $this->hasMany('App\Models\Product');
}
而Product.php有
public function productcategory()
{
return $this->belongsTo('App\Models\Productcategory', 'category_id');
}
现在我的路线是
Route::get('gallery/{slug}', 'GalleryController@index');
当网址类似于gallery/print-pattern-client-work
时,如何才能获得具有相同类别的所有产品?我有以下内容,但category_id
是一个整数而不是一个slug。所以我不太确定该怎么做。
public function index()
{
$categoryslug = Request::segment(2);
$products = Productcategory::with('products')->where('category_id',$categoryslug)->get();
...
}
答案 0 :(得分:5)
这假设您有一个名为" slug"的列。在您的product_categories表中。并且您描述的关系运作良好。
您可以在Product.php中创建一个访问者
public function scopeFindByCategorySlug($query, $categorySlug)
{
return $query->whereHas('productcategory', function ($query) use ($categorySlug) {
$query->where('slug', $categorySlug);
});
}
然后在你的控制器中你打电话给:
public function index(Request $request, $slug)
{
$products = Product::findByCategorySlug($slug)->get();
}
编辑:
如评论中所述,实际上并不需要访问者。这基本上就是你所需要的(在控制器中):
public function index(Request $request, $slug)
{
$products = Product::whereHas('productcategory', function ($query) use ($categorySlug) {
$query->where('slug', $categorySlug);
})->get();
}
答案 1 :(得分:1)
不要
$categoryslug = Request::segment(2);
使用$slug
public function index($slug)
{
$products = Productcategory::with('products')->where('category_id',$slug)->get();
...
}
答案 2 :(得分:0)
当你使用Laravel时,你应该像这样使用Laravel的Many to Many Relationships:
您的表格结构如下:
- products
- id
- name
- ...
- categories
- id
- name
- slug
- ...
- category_product
- id
- category_id
- product_id
- ...
你的模特应该是这样的:
class Product extends Model {
public function categories() {
$this->belongsToMany(Category::class, 'category_product');
}
}
class Category extends Model {
public function products() {
$this->belongsToMany(Product::class, 'category_product');
}
}
您可以像这样获取特定$category_slug
的所有产品:
$category = Category::where('slug', $category_slug)->first();
if($category) {
$products = $category->products;
}