繁体   English   中英

Laravel 5.6 | 雄辩的一对多关系

[英]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'); 
   } 
}

但这有意义吗? 成员模型实质上是说成员可以有多种语言。 但事实并非如此。 会员只能使用一种语言。

您能帮我澄清一下这个问题吗?

谢谢

你的关系是错的。

因为成员只能有一种语言,一个MemberbelongsTo Language ,不是hasMany Language 因此, LanguagehasMany很多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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM