[英]Many to Many relationships with Laravel / Eloqeunt
我想我大部分时候都了解Eloquent,但在理解多对多关系方面仍然有些困难。
我正在设计一个示例数据库,希望大家能帮助我理解正确的方法。
表1:类别
cat_id
cat_name
表2:画廊
gallery_id
gallery_name
表3:画廊类别
cat_id
gallery_id
那么我将如何处理我的模型? 我找到了这个主题,但似乎不太正确。 也许是因为这比我需要的关系复杂得多。 我认为逻辑使我感到困惑,因为我希望产品包含术语,而在该示例中术语包含产品。
如果您可以用我的示例进行解释,它将帮助我更好地理解belongsToMany()
和hasMany()
方法及其参数。 我也对一些不带任何外键参数的示例感到困惑。
已经谢谢你了!
要使其适用于您的模式,您需要:
// Category model
protected $primaryKey = 'cat_id';
public function galleries()
{
return $this->belongsToMany('Gallery', 'galleryCategories', 'gallery_id', 'cat_id');
}
// Gallery model
protected $primaryKey = 'gallery_id';
public function categories()
{
return $this->belongsToMany('Category', 'galleryCategories', 'cat_id', 'gallery_id');
}
// then:
$category = Category::first();
$category->galleries; // collection of Gallery models
要使其符合口才惯例,您需要:
// tables
categories: id, ...
galleries: id, ...
category_gallery: id, category_id, gallery_id [, timestamps]
// models
// Category
public function galleries()
{
return $this->belongsToMany('Gallery');
}
// Gallery
public function categories()
{
return $this->belongsToMany('Category');
}
如果要使用大部分框架,第二种解决方案会更好,但是如果要依赖架构,则可以对其进行Eloquent调整。
注意: hasMany
是1-m关系, belongsTo
是它的对应关系,而对于与数据透视表的多对多关系, belongsToMany
在两端都使用belongsToMany
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.