【问题标题】:Laravel Eloquent Relationships between multiple tablesLaravel Eloquent 多个表之间的关系
【发布时间】:2016-10-19 17:52:39
【问题描述】:

我正在研究 laravel 关系,但我只能在 2 个表之间看到它们......我想知道是否有像一对一这样的东西可以与 3 个表一起使用?

例如,我有以下表格

websites
preferences
websites_preferences

一个网站有一个偏好,但是通过websites_preferences表是关系所在。

任何帮助都会很棒。

干杯,

【问题讨论】:

  • 对我来说,这看起来像是Many-to-Many 关系。
  • 在一对一中,您不需要 website_preferences 表。

标签: php laravel


【解决方案1】:

如果您只需要一对一的关系,则不需要 website_preferences 表。

但你可以这样做 -> 有很多通过关系:

class Website extends Model

    {
        public function preferences()
        {
            return $this->hasManyThrough('App\Preferences', 'App\Website_preferences');
        }
    }

来源:https://laravel.com/docs/5.3/eloquent-relationships#has-many-through

【讨论】:

  • 这似乎是我所追求的……这是否会通过 website_preferences 表将特定偏好与网站相关联? ...这是否是处理表结构的最佳方式
【解决方案2】:

一对一关系无需使用中间表。

如果你想在网站和偏好之间使用多对多关系,你可以这样做。

为此,您需要中间表“website_preferences”

class Website extends Model
{
    public function preferences()
    {
        return $this->belongsToMany('App\Preference', 'website_preferences', 'website_id', 'preference_id');
    }
}

class Preference extends Model
{
    public function websites()
    {
        return $this->belongsToMany('App\Website', 'website_preferences', 'preference_id', 'website_id');
    }
}

参考这个链接,它可能会有所帮助 https://laravel.com/docs/5.3/eloquent-relationships#many-to-many

【讨论】:

    【解决方案3】:

    实际上,一对一关系不需要第三个表。第三张表用于多对多。您可以使用preferences 表的primary key 作为websites 表的外键。

    【讨论】:

      猜你喜欢
      • 2019-06-23
      • 2020-03-27
      • 2018-10-05
      • 2020-05-06
      • 1970-01-01
      • 2021-03-26
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多