【问题标题】:How to display related products through pivot table?如何通过数据透视表展示相关产品?
【发布时间】:2021-04-29 11:39:15
【问题描述】:

我想显示属于同一类别的相关项目。

这是我的 3 表结构

食品表 : “food_item_id”,

“姓名”,

“图像”,

食品类别表:

“food_item_category_id”

“名称”

数据透视表

身份证

food_item_id

food_item_category_id

FooItem 模型:

public function foodItemCategory() {
    return $this->belongsToMany(FoodItemCategory::class, 'food_items_have_categories', 'food_item_id', 'food_item_category_id')
        ->withPivot('food_item_id', 'food_item_category_id')
        ->withTimestamps();
}

食品类别模型:

 public function foodItem() {
    return $this->belongsToMany(FoodItem::class, 'food_items_have_categories', 'food_item_category_id', 'food_item_id')
        ->withPivot('food_item_id', 'food_item_category_id')
        ->withTimestamps();
}

我想获取特定类别的所有食品。假设用户点击了一个 ID 为 1 且属于类别 ID 2 的食品项目。现在我想显示更多类别 ID 2 中的食品项目。我想在我的视图刀片中显示它。 现在,如何在同一类别的视图中显示相关产品?

【问题讨论】:

  • 嗨。您有数据透视表,因此一个项目可以有零个或多个类别。你想选择哪一个?重要还是您只想要任何具有此项目类别的项目?
  • @Mohammad Mirsafaei,假设我有 ID 为 1、2、3、4、5 的食物。现在我选择项目 ID 1,它属于类别 3。在类别 ID 3 中可能有更多项目,例如食品项目 ID 3,5 或没有,如果食品项目具有相同的类别 ID,我想显示。当用户单击食品 ID 1 时,它会显示项目 ID 1 的详细信息,并在下面显示项目 ID 3、5 的详细信息,因为项目 1、3、5 具有相同的类别 ID 3
  • @Prince 项目可能有很多类别,比如 A、B 和 C?然后相关项目将从 AB 和 C 类别中显示或有任何其他情况,而且您有多对多映射,withPivot 子句是多余的,因为它包含已在您的 belongsToMany 子句中定义的外键跨度>

标签: php laravel eloquent eloquent-relationship


【解决方案1】:

由于您的关系是多对多的,您可以这样做:

$food = FoodItem::find(1);
$categories = $food->foodItemCategory;
$items = [];
foreach($categories as $category) {
   $items[$category->id] = $category->foodItem;
}

然后您可以将$items 传递给您的刀片模板。

【讨论】:

  • 谢谢。它的工作。但是,如果我想显示除此 FoodItem::find(1) 之外的所有项目怎么办??
  • 欢迎您。你可以这样做:$items[$category->id] = $category->foodItem()->filter(function($item) { return $item->id != $food->id;})->toArray()
猜你喜欢
  • 2016-02-08
  • 1970-01-01
  • 2021-06-10
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多