Laravel Eloquent多个表之间的关系

时间:2016-10-19 09:19:47

标签: php laravel

我正在研究laravel关系,但我只能在2个表之间看到它们......我想知道是否存在与3个表一对一的一对一的事情?

例如,我有以下表格

websites
preferences
websites_preferences

一个网站有一个首选项,但通过websites_preferences表是关系所在的位置。

任何帮助都会很棒。

干杯,

3 个答案:

答案 0 :(得分:2)

如果您只想要一对一的关系,则不需要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

答案 1 :(得分:1)

无需将中间表用于一对一关系。

如果您想在网站和偏好设置之间使用多对多关系,您可以执行以下操作。

为此你需要中间表'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

答案 2 :(得分:0)

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