如何在laravel中获得多对多的关系项目

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()但是没有运气,还有如何重写那个函数来支持系列的显示?

非常感谢.

Par*_*ain 5

假设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将为特定系列提供多类别产品.

参考:标准雄辩的关系 - 很多人