use*_*104 9 html php mysql many-to-many laravel
电子商店有一个数据结构:
Series -> (many to many) -> categories -> (many to many) -> products
Run Code Online (Sandbox Code Playgroud)
例如,系列是"户外系列",类别是"T恤",产品是"T恤A,T恤B等......"
以下是控制器列出一个类别的产品
public function view($series = 0, $cat = 0, $page = 1) {
$category = Category::find($cat);
$totalItems = count($category->product);
$itemsPerPage = 30;
$currentPage = $page;
$urlPattern = "/ums/product/view/$series/$cat/(:num)";
$this->data['product_list'] = $category->product()->orderBy('created_at', 'desc')->skip(($page - 1) * $itemsPerPage)->take($itemsPerPage)->get();
$this->data['paginator'] = new Paginator($totalItems, $itemsPerPage, $currentPage, $urlPattern);
$this->data['category'] = $category;
$this->data['page'] = $page;
return view('product/list')->with($this->data);
}
Run Code Online (Sandbox Code Playgroud)
现在,问题是,我想重写代码,以便不是显示一个类别,我想展示一个系列.
这意味着如果$ series = 0,那么它会在一个类别中显示产品,如果$ cat = 0,那么它会显示多个类别的产品
在laravel如何获得多类别的产品?尝试$ series-> category-> product()但是没有运气,还有如何重写那个函数来支持系列的显示?
非常感谢.
假设Laravel模型类 - 系列,类别和产品
对于Series Model Class,创建一个函数
public function categories()
{
return $this->belongsToMany('App\Category');
}
Run Code Online (Sandbox Code Playgroud)
对于Category Model Class,创建一个函数
public function products()
{
return $this->belongsToMany('App\products');
}
Run Code Online (Sandbox Code Playgroud)
现在,对于给定的系列,您可以使用简单的函数调用轻松检索所有相关类别
$categories = $series->categories();
Run Code Online (Sandbox Code Playgroud)
最后讨论了在多个类别下展示产品的主要问题.
for($categories as $category)
{
$productsOfThisCategory = $categories->products();
//save into some other data structure, say an array $allProducts
}
Run Code Online (Sandbox Code Playgroud)
$ allProducts将为特定系列提供多类别产品.