猿问

如何查询获取mysql数据库laravel中与特定类别相关的所有产品

以下是我的类别表:

这是产品类别表:

https://img1.sycdn.imooc.com/65a9d84e00019e6407780637.jpg

这是产品表:

https://img1.sycdn.imooc.com/65a9d85e0001c0e111010555.jpg

我想按特定和单一类别获取产品并在滑块中显示,例如

  • 类别为电子的所有产品

  • 类别为服装的产品

  • 类别可移动的所有产品

我很困惑如何通过连接所有表来查询和获取数据。

有人可以帮帮我吗?


小怪兽爱吃肉
浏览 98回答 2
2回答

四季花海

你可以利用口才和关系。在您的 ProductCategory 模型上执行以下操作:public function product(){ return $this->belongsTo('App\Product', 'productId')}public function category(){ return $this->belongsTo('App\Category', 'categoryID')}然后你可以像这样查询:ProductCategory::with(['product','category'])->where('categoryId', 191)->get();

凤凰求蛊

您可以通过在模型中定义关系来实现它,如下所示:在您的产品模型中定义类别函数 public function categories() {    return $this->belongsToMany(Category::class, 'product_categories', 'productId', 'categoryId');}类别模型中的相似性定义了产品的关系public function products() {    return $this->belongsToMany(Product::class, 'product_categories', 'categoryId', 'productId');}在本例中,product_categories 表是一个数据透视表,数据透视表需要遵循一些规则:数据透视表应该是两个表的单数名称,在您的情况下它应该是product_category表数据透视表命名约定应该按字母顺序排列,在您的情况下它应该是category_product无需在 ppivot 表中创建 id 和 timestamps 列您实际上不需要为数据透视表创建模型另外,这不是规则,而是建议,您的表列应该是蛇形大小写,例如category_id在模型中定义这些函数后,您可以按如下方式访问相关数据:$product = Product::find(27); //finding product by id$product->categories;$category = Category::find(187); //finding category by id $category->products;
随时随地看视频慕课网APP
我要回答