Laravel Eloquent 关系 - 3 个表,其中一个是查找表
Posted
技术标签:
【中文标题】Laravel Eloquent 关系 - 3 个表,其中一个是查找表【英文标题】:Laravel Eloquent Relationships - 3 tables, one of which is a lookup table 【发布时间】:2016-05-02 05:55:03 【问题描述】:我很难理解一些关系。
-
我有一个名为 User 的模型(只存储用户)
名为 Addresses 的模型(存储用户可能拥有的所有地址)
名为 Country 的模型(国家代码和描述的查找列表)
以下是简化的架构,可帮助您展示我想要实现的目标:
用户模型
user_id (integer)
地址表
user_id (integer)
country_code (integer)
国家表:
country_code (integer)
country_description (text)
我在 User 模型中有如下关系: 用户模型有关系:
public function addresses()
return $this->hasMany('App\Address');
在地址模型中我有一个关系
public function user()
return $this->belongsTo('App\User');
现在,在我的刀片模板中,我可以通过 user->addresses @foreach 并返回存储在地址表中的国家代码,例如“US”或“GB”
但是,我希望能够显示国家/地区的完整名称,该名称保存在国家/地区表中。
我如何以及在哪里设置一个关系,它仍然允许我遍历地址表,但也与国家表有关系,以便我可以显示国家/地区描述列。?
任何想法
问候
詹姆斯
【问题讨论】:
未测试,但尝试将其添加到您的Addresses
模型中:public function country() return $this->belongsTo('App\Countries', 'country_code');
。然后,当您遍历用户的地址时:$address->country->country_description
。
【参考方案1】:
在您的地址模型中:
public function countries()
return $this->hasOne('App\Countries', 'country_code');
然后您可以访问 $address->countries->country_description;
【讨论】:
谢谢,这行得通——它是如何在我弄错的 Blade.page 中访问它,所以你的 $address->countries->country_description 解决了这个问题。我不知道可以像这样链接。再次感谢! 在此处查看更多内容:laravel.com/docs/5.2/eloquent-relationships以上是关于Laravel Eloquent 关系 - 3 个表,其中一个是查找表的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent 关系 - 将数据插入多个表
Laravel eloquent apply whereHas on the latest record of hasMany 关系
在 laravel 4 中使用五个模型的 Eloquent 映射表关系