Laravel 获取所有属于类别的记录
Laravel get all records who have category
所以我已经为此苦苦挣扎了一段时间。
我不想获得包含某个枢轴 category
.
的所有 'products'
所以我有一条路线:
Route::get('products/{category}', ['as' => 'category.products', 'uses' => 'ProductsController@getCatProducts']);
还有一个产品模型:
public function categories()
{
return $this->belongsToMany(Category::class);
}
然后是我的控制器:
public function getCatProducts($categoryUrl)
{
$products = Product::get();
$productsWithCat = [];
// loop through all projects
foreach($products as $product) {
// loop through all categories assigned to product
$categories = $product->categories;
foreach($categories as $category) {
// check if product has category from url
if ($category->title == $categoryUrl) {
array_push($productsWithCat, $product);
}
}
}
$category = $categoryUrl;
$products = $productsWithCat;
return view('pages.category-products', compact('products', 'category'));
}
这是可行的,但可能还有更好的方法。
类似于:
$products = Product::with('categories.title', $categoryUrl)->get();
也是我的方式 returns 数组而不是 collection,所以我什至无法进入我的 blade.
中的类别
希望有人能帮帮我。
谢谢!
有一个更好的方法,你已经很接近了...
$products = Product::with('categories')
->whereHas('categories', function($q) use ($categoryUrl) {
$q->where('title', $categoryUrl);
})->get();
您可能需要在类别模型中实施 belongsToMany 方法,以便 return 属于此特定传递类别的所有产品集合在一起。
// Category.php
public function products()
{
return $this->belongsToMany(Product::class);
}
在控制器中使用:
$products = Category::with('products')->where('title', $categoryName)->get();
所以我已经为此苦苦挣扎了一段时间。
我不想获得包含某个枢轴 category
.
所以我有一条路线:
Route::get('products/{category}', ['as' => 'category.products', 'uses' => 'ProductsController@getCatProducts']);
还有一个产品模型:
public function categories()
{
return $this->belongsToMany(Category::class);
}
然后是我的控制器:
public function getCatProducts($categoryUrl)
{
$products = Product::get();
$productsWithCat = [];
// loop through all projects
foreach($products as $product) {
// loop through all categories assigned to product
$categories = $product->categories;
foreach($categories as $category) {
// check if product has category from url
if ($category->title == $categoryUrl) {
array_push($productsWithCat, $product);
}
}
}
$category = $categoryUrl;
$products = $productsWithCat;
return view('pages.category-products', compact('products', 'category'));
}
这是可行的,但可能还有更好的方法。 类似于:
$products = Product::with('categories.title', $categoryUrl)->get();
也是我的方式 returns 数组而不是 collection,所以我什至无法进入我的 blade.
中的类别希望有人能帮帮我。
谢谢!
有一个更好的方法,你已经很接近了...
$products = Product::with('categories')
->whereHas('categories', function($q) use ($categoryUrl) {
$q->where('title', $categoryUrl);
})->get();
您可能需要在类别模型中实施 belongsToMany 方法,以便 return 属于此特定传递类别的所有产品集合在一起。
// Category.php
public function products()
{
return $this->belongsToMany(Product::class);
}
在控制器中使用:
$products = Category::with('products')->where('title', $categoryName)->get();