我正在学习php和laravel。我正在为公司做一次测试,如果我通过,我可以考虑加入开发团队。 crud测试的要求之一是成员(主要对象)可能有多种语言选项列表中的一种语言。显然,一种语言可以链接到多个成员。
因此,如果我正确阅读了laravel文档,将自动设置主模型(Member)和辅助模型(Language)之间的外键。我的问题是如何在逻辑上建立关系。
我的成员表中的一列是language_id列,而language表由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');
}
}
但这有意义吗?会员模型基本上是说会员可以有多种语言。但事实并非如此。该成员只能使用一种语言。
你能帮我解释一下这个问题。
由于
答案 0 :(得分:1)
你的关系错了。
由于成员只能使用一种语言,因此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
希望这有帮助!
答案 1 :(得分:-1)
you should create one junction model MemberLanguage (obviously this will have a table with member_id and language_id attribute) where you will have member_id and language_id, so the relation in Member model u can have is-
class Member extends Model
{
public function memberLanguage()
{
return $this->hasMany('App\MemberLanguage');
}
}
In your MemberLanguage Model, you will have
class MemberLanguage extends Model
{
public function member()
{
return $this->belongsTo('App\Member');
}
public function language()
{
return $this->belongsTo('App\Language');
}
}