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 关系 - 将数据插入多个表

Laravel eloquent apply whereHas on the latest record of hasMany 关系

在 laravel 4 中使用五个模型的 Eloquent 映射表关系

如何使用 Laravel 的 Eloquent 关系与 Eager Loading 连接 3 个表?

Laravel Eloquent 关系 - 3 个表,其中一个是查找表