繁体   English   中英

与Laravel / Eloqeunt的多对多关系

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM