我认为我在很大程度上理解了Eloquent,但是我仍然很难理解许多关系。
我正在设计一个示例数据库,希望大家可以帮助我理解正确的方法。
表1 类别
cat_id
cat_name
表2:图库
gallery_id
gallery_name
表3: galleryCategories
cat_id
gallery_id
那我该怎么做我的模特?我发现了这个话题,但它看起来并不合适。也许是因为它比我需要的关系更复杂一些。我认为这种逻辑使我感到困惑,因为我希望产品具有术语,而在该示例中,产品具有产品。
如果你能用我的样本解释它,它将帮助我更好地理解belongsToMany()
和hasMany()
方法及其参数。我还对一些没有采用任何外键参数的例子感到困惑。
谢谢!
答案 0 :(得分:1)
要使其适用于您的架构,您需要:
// 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
要使其符合Eloquent约定,您需要:
// 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
。