Laravel 5.6 |雄辩的一对多关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 5.6 |雄辩的一对多关系相关的知识,希望对你有一定的参考价值。
我正在学习php和laravel。我正在为一家公司做一次测试,如果我通过,我可以考虑加入开发团队。 crud测试的要求之一是成员(主要对象)可能有多种语言选项列表中的一种语言。显然,一种语言可以链接到多个成员。
因此,如果我正确读取了laravel文档,将自动设置主模型(Member)和辅助模型(Language)之间的外键。我的问题是如何在逻辑上建立关系。
我的成员表中的一列是language_id列,而languages表由id(显然)和语言名称组成。
根据示例,关系应该看起来像这样:
会员型号:
class Member extends Model
{
public function language()
{
return $this->hasMany('AppLanguage');
}
}
语言模型:
class Language extends Model
{
public function member()
{
return $this->belongsTo('AppMember');
}
}
但这有意义吗?会员模型基本上是说会员可以有多种语言。但事实并非如此。该会员只能使用1种语言。
你能帮我解释一下这个问题。
谢谢
你的关系是对的。
因为一个成员只能有一种语言,所以Member
是belongsTo
Language
,而不是hasMany
Language
。因此,Language
将hasMany
很多Member
s。
看到:
- 简单数据库:
成员:
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('AppLanguage', 'language_id');
}
}
class Language extends Model
{
public function members()
{
return $this->hasMany('AppMember', 'language_id');
}
}
language_id
是这种关系的外键。在这种情况下,使用这个与否不是主人。
然后,当你想要检索成员语言时,只需使用$member->language
;并且,当您想要检索具有$language
的所有成员时,请使用$language->members
希望这有帮助!
你应该创建一个联结模型MemberLanguage(显然这将有一个带有member_id和language_id属性的表),你将拥有member_id和language_id,因此成员模型中你可以拥有的关系是 -
class Member extends Model
{
public function memberLanguage()
{
return $this->hasMany('AppMemberLanguage');
}
}
在您的MemberLanguage模型中,您将拥有
class MemberLanguage extends Model
{
public function member()
{
return $this->belongsTo('AppMember');
}
public function language()
{
return $this->belongsTo('AppLanguage');
}
}
以上是关于Laravel 5.6 |雄辩的一对多关系的主要内容,如果未能解决你的问题,请参考以下文章