【问题标题】:Many to Many relationships with Laravel / Eloqeunt与 Laravel / Eloquent 的多对多关系
【发布时间】:2014-07-25 21:26:17
【问题描述】:

我想我在很大程度上理解了 Eloquent,但我在理解多对多关系时仍然有些困难。

我正在设计一个示例数据库,希望你们能帮助我了解正确的方法。

表 1: 类别

  • cat_id
  • cat_name

表 2: 画廊

  • gallery_id
  • gallery_name

表 3: 画廊类别

  • cat_id
  • gallery_id

那么我将如何处理我的模型?我找到了这个主题,但它似乎不太正确。也许是因为它的关系比我需要的要复杂一些。我认为逻辑让我感到困惑,因为我希望产品具有术语,而术语在该示例中具有产品。

如果您能用我的示例解释一下,它将帮助我更好地理解belongsToMany()hasMany() 方法及其参数。我也对一些不采用任何外键参数的示例感到困惑。

已经谢谢了!

【问题讨论】:

  • 分类和画廊有什么关系?

标签: php laravel eloquent


【解决方案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

【讨论】:

  • 感谢这真的为我解决了问题! (PS:我认为你在 Gallery 模型上打错了。方法名称应该是 categories(),对吧?)
猜你喜欢
  • 2013-05-15
  • 2014-09-27
  • 2019-06-13
  • 2019-03-26
  • 1970-01-01
  • 2018-10-05
  • 2013-02-09
  • 2013-05-27
  • 2016-11-03
相关资源
最近更新 更多