[英]Laravel 5.6 | Eloquent One to Many Relationship
我正在学习php和laravel。 我正在为一家公司进行粗略测试,如果通过,我可以考虑加入开发团队。 原始测试的要求之一是,成员(是主要对象)可以从多种语言选项列表中选择一种语言。 显然,一种语言可以链接到多个成员。
因此,如果我正确阅读了laravel文档,则将自动设置主模型(成员)和辅助模型(语言)之间的外键。 我的问题是如何在逻辑上建立关系。
我的成员表中的一列是language_id列,而languages表则由id(显然)和语言名称组成。
根据示例,该关系应如下所示:
会员型号:
class Member extends Model
{
public function language()
{
return $this->hasMany('App\Language');
}
}
语言模型:
class Language extends Model
{
public function member()
{
return $this->belongsTo('App\Member');
}
}
但这有意义吗? 成员模型实质上是说成员可以有多种语言。 但事实并非如此。 会员只能使用一种语言。
您能帮我澄清一下这个问题吗?
谢谢
你的关系是错的。
因为成员只能有一种语言,一个Member
是belongsTo
Language
,不是hasMany
Language
。 因此, Language
会hasMany
很多Member
秒。
看到:
成员 :
id | name | language_id | int | var_char | int+nullable | // because member can have no lang
语言
id | name | int | var_char |
(2个文件)
class Member extends Model
{
public function language()
{
return $this->belongsTo('App\Language', 'language_id');
}
}
class Language extends Model
{
public function members()
{
return $this->hasMany('App\Member', 'language_id');
}
}
language_id
是关系的外键。 在这种情况下,使用这个不是大师。
然后,当您想要检索成员语言时,只需使用$member->language
; 并且,当你想检索具有所有成员$language
,使用$language->members
希望对您有所帮助!
您应该创建一个结点模型MemberLanguage(显然,这将具有一个具有member_id和language_id属性的表),其中您将具有member_id和language_id,因此您在Member Model中可以具有以下关系:
class Member extends Model
{
public function memberLanguage()
{
return $this->hasMany('App\MemberLanguage');
}
}
在您的MemberLanguage模型中,您将拥有
class MemberLanguage extends Model
{
public function member()
{
return $this->belongsTo('App\Member');
}
public function language()
{
return $this->belongsTo('App\Language');
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.