Php 与Laravel/Eloqeunt的多对多关系

Php 与Laravel/Eloqeunt的多对多关系,php,laravel,eloquent,Php,Laravel,Eloquent,我想我在很大程度上理解了雄辩,但我在理解多对多关系方面仍然有一些困难 我正在设计一个示例数据库,希望你们能帮助我理解正确的方法 表1:类别 cat\u id cat\u name 表2:画廊 gallery\u id gallery\u name 表3:厨房类别 cat\u id gallery\u id 那么我该如何处理我的模型呢?我找到了这个话题,但似乎不太正确。也许是因为这是一种比我需要的更复杂的关系。我想这个逻辑把我弄糊涂了,因为在那个例子中,我希望产品有术语,而术语有产品

我想我在很大程度上理解了雄辩,但我在理解多对多关系方面仍然有一些困难

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

表1:类别

  • cat\u id
  • cat\u name
表2:画廊

  • gallery\u id
  • gallery\u name
表3:厨房类别

  • cat\u id
  • gallery\u id
那么我该如何处理我的模型呢?我找到了这个话题,但似乎不太正确。也许是因为这是一种比我需要的更复杂的关系。我想这个逻辑把我弄糊涂了,因为在那个例子中,我希望产品有术语,而术语有产品

如果您能用我的示例解释一下,它将帮助我更好地理解
belongTomany()
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');
}
如果您想充分利用框架,第二种解决方案要好得多,但是如果您想依赖您的模式,那么您可以对其进行雄辩的调整



注意:
hasMany
是1-m关系,
belongsTo
是它的对应关系,而对于pivot表的多对多关系,您可以在两端使用
belongstomy

类别和图库之间的关系是什么?谢谢,这真的为我澄清了问题!(附言:我认为你在图库模型上打错了字。方法名应该是categories(),对吗?)