Laravel “拉雷维尔”;“三方”;透视表?

Laravel “拉雷维尔”;“三方”;透视表?,laravel,pivot,relation,Laravel,Pivot,Relation,作品: 我的网站上有一个叫做“杂货”的页面。为此,我使用了两个表: Categories [$this->hasMany('App\Product')] - id - name Products [$this->belongsTo('App\Category')] - id - category_id - name 简单的东西。在我的查询中,我收集所有类别及其对应的产品杂货=类别::with('products')->get() 然后在我的视图中,我可以访问所有类别及其产品,并很

作品:

我的网站上有一个叫做“杂货”的页面。为此,我使用了两个表:

Categories [$this->hasMany('App\Product')]
- id
- name

Products [$this->belongsTo('App\Category')]
- id
- category_id
- name
简单的东西。在我的查询中,我收集所有类别及其对应的产品<代码>杂货=类别::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。但后来我被卡住了。我还应该在pivot表中存储什么,以便我能够继续使用上述方法,但使用额外的参数,如:

$groceries = Grocery::find($id)->with('categories')->with('products'); ?
Category Alcohol
- [ ] Beer
- [ ] Wine
- [ ] Whisky

Category Bread
- [ ] Brown Bread
- [ ] White Bread
我个人的想法是,我应该在我的杂货模型中使用以下关系:

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页面上,我有一个当前登录用户的简单杂货清单。他们可以创建、编辑或删除购物清单

一旦用户单击“创建杂货清单”,我将显示一个包含所有类别及其对应产品的视图,如下所示:

$groceries = Grocery::find($id)->with('categories')->with('products'); ?
Category Alcohol
- [ ] Beer
- [ ] Wine
- [ ] Whisky

Category Bread
- [ ] Brown Bread
- [ ] White Bread
[]代表复选框。用户可以选择要添加到列表中的产品。保存后,我想将杂货店列表ID存储在一个透视表中,该透视表包含所选的产品ID


然后,在编辑表单上,我想显示相同的视图,但已选择保存的产品。因此,我认为实现这一点的最佳方法是将杂货店ID存储在透视表中,它是选定的产品。然后,在编辑表单上,我只需检查产品ID是否存在,如果存在,则应选中复选框。但我一直在思考这些关系应该是什么样的,我实际上应该在我的数据透视表中存储什么,产品id是我说过的还是我根本不应该使用数据透视表

  • 在您的情况下,属于某一类别的产品
  • 因此,一个类别有许多产品
  • 用户
    有许多
    “杂货清单”,其中每个
    都有许多
    产品
  • 因此,一个列表也属于一个特定的用户
  • 因此,一个产品也将
    归入多个
    列表
  • 这就省去了进行三向透视的麻烦,而Elountit将让您在填充描述中的复选框列表时方便地浏览任何模型的任何和所有关系。 这里有一个例子-可能需要一些调整

    然而,我更喜欢查询生成器或普通的原始数据库查询,而不是像这样的复杂联接的雄辩方法,因为Laravel中的关系生成器实际上在(1,2,3)
    中执行了一个
    ,其中id位于(1,2,3)
    ,这在性能上比常规联接差一点。请参阅以下参考资料:


    以下是我的做法:

  • 在您的情况下,属于某一类别的产品
  • 因此,一个类别有许多产品
  • 用户
    有许多
    “杂货清单”,其中每个
    都有许多
    产品
  • 因此,一个列表也属于一个特定的用户
  • 因此,一个产品也将
    归入多个
    列表
  • 这就省去了进行三向透视的麻烦,而Elountit将让您在填充描述中的复选框列表时方便地浏览任何模型的任何和所有关系。 这里有一个例子-可能需要一些调整

    然而,我更喜欢查询生成器或普通的原始数据库查询,而不是像这样的复杂联接的雄辩方法,因为Laravel中的关系生成器实际上在(1,2,3)
    中执行了一个
    ,其中id位于(1,2,3)
    ,这在性能上比常规联接差一点。请参阅以下参考资料:


    在您的情况下,什么是杂货清单<代码>用户ID 1有:一瓶葡萄酒、两瓶啤酒、一块奶酪
    -类似或否?解释杂货与类别和/或产品之间的关系。请提供类别、杂货和产品之间的关系。抱歉,添加到above@Kaloyan多伊奇诺夫。一个用户可以有多个购物清单。杂货清单只是由产品清单组成。但我认为我确实需要在作品中详细阐述这一点。威尔:)在你的情况下,什么是杂货清单<代码>用户ID 1有:一瓶葡萄酒、两瓶啤酒、一块奶酪
    -类似或否?解释杂货与类别和/或产品之间的关系。请提供类别、杂货和产品之间的关系。抱歉,添加到above@Kaloyan多伊奇诺夫。一个用户可以有多个购物清单。杂货清单只是由产品清单组成。但我想我确实需要在作品中详细说明这一点。威尔:)谢谢,尽管第3和第5是我不确定的事情。但是现在你这样说,它实际上是非常有意义的。现在是时候试着把我的脑袋绕过去了:谢谢,虽然第三和第五是我不确定的事情。但是现在你这样说,它实际上是非常有意义的。现在是时候