我正在研究laravel关系,但我只能在2个表之间看到它们......我想知道是否存在与3个表一对一的一对一的事情?
例如,我有以下表格
websites
preferences
websites_preferences
一个网站有一个首选项,但通过websites_preferences表是关系所在的位置。
任何帮助都会很棒。
干杯,
答案 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
表的外键。