【发布时间】:2016-02-03 11:34:34
【问题描述】:
操作:
我的网站上有一个名为“杂货”的页面。为此,我使用了两个表:
Categories [$this->hasMany('App\Product')]
- id
- name
Products [$this->belongsTo('App\Category')]
- id
- category_id
- name
简单的东西。在我的查询中,我收集了所有类别及其相应的产品。 groceries = Category::with('products')->get();
然后在我看来,我可以访问所有类别及其产品并很好地列出它们,所有类别将显示一次,类别名称下方将是我的产品。都好。示例:
Category Alcohol
- Beer
- Wine
- Whisky
Category Bread
- Brown Bread
- White Bread
..等等。
然后它就变得棘手了,至少对我来说。到目前为止,我一直在使用上述方法制作一份简单的购物清单。但现在我想添加另一个名为“Groceries”的表,我在其中存储杂货清单。像这样:
Groceries
- id
- name
有了这个,我认为数据透视表会派上用场,但我不确定要在数据透视表中存储什么以及如何访问所有数据:
category_product?
grocery_product?
- id
- grocery_id
- product_id?
- category_id? I don't think I need to store this in the pivot table, it can be accessed through the Products model?
- number
我一直很难理解“简单”的数据透视表,现在它变得更加棘手,有了“三向”数据透视表。
我希望将以下内容存储在我的数据透视表中:
杂货清单的杂货 ID。但后来我卡住了。我还应该在数据透视表中存储什么,以便我仍然能够继续使用上述方法,但是需要一个额外的参数,如下所示:
$groceries = Grocery::find($id)->with('categories')->with('products'); ?
我个人的想法是,我 should 在我的杂货模型中使用以下关系吗?:
public function categories()
{
return $this->hasMany('App\Category')->with('App\Product');
}
任何指向正确方向的指针,以帮助将我的思想指向正确的方向,已经可以帮助很多人了。
编辑:
模型用户:
public function groceries()
{
return $this->hasMany('App\Grocery');
}
型号类别:
public function products()
{
return $this->hasMany('App\Product');
}
模型产品:
public function category()
{
return $this->belongsTo('App\Category');
}
模型杂货:
// No relations yet
编辑#2: 在我的 groceries.index 页面上,我有一个简单的当前登录用户的购物清单列表。他们可以创建、编辑或删除购物清单。
一旦用户点击“创建杂货清单”,我会显示一个包含所有类别及其对应产品的视图,如下所示:
Category Alcohol
- [ ] Beer
- [ ] Wine
- [ ] Whisky
Category Bread
- [ ] Brown Bread
- [ ] White Bread
[ ] 代表复选框。用户可以选择他或她想要添加到列表中的产品。保存后,我想将购物清单 ID 存储在带有所选产品 ID 的数据透视表中。
然后,在编辑表单上,我想显示相同的视图,但已选择保存的产品。所以,我认为实现这一点的最佳方法是将杂货店 ID 存储在数据透视表中,并且它是选定的产品。然后,在编辑表单上,我只需检查产品 ID 是否存在,如果存在,则应选中复选框。但是我对关系应该是什么样子以及我实际上应该存储在我的数据透视表中的内容感到困惑,正如我所说的产品 ID 或者我什至不应该使用数据透视表?
【问题讨论】:
-
在您的案例中,杂货清单是什么?
User ID 1 has: One wine, two beers, one cheese- 是不是这样? -
解释 Grocery 与类别和/或产品的关系。
-
请提供类别、杂货和产品之间的关系..
-
抱歉,加在上面
-
@Kaloyan Doichinov。一个用户可以有多个购物清单。杂货清单仅由产品清单组成。但我认为我确实需要在 OP 中详细说明这一点。会做的:)