Laravel雄辩地拥有“多次通过”关系

时间:2018-07-07 04:44:12

标签: php laravel eloquent relational-database

所以,就在这里。我有3张桌子,它们的结构如下:

**user**
 -id
 -name
 -password
 -etc...

**user_general_info**
 -id
 -the_user_id
 -country_id
 -phone
 -desc
 ...

**country**
 -id
 -name

出于显而易见的原因,我为每个模型中的三个模型。现在如何声明这3个之间的雄辩关系,以便可以获取用户所在国家(例如$user->user_general_info->user_country->name之类的数据)?我已经尝试过hasManyThrough,但没有成功。

我是否必须将country 外键添加到user表中?还是我错过了什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

有多种处理方法。但是,最干净的方法之一是在用户模型中声明hasOne关系并检索结果。

因此,假设您有三个模型,UserUserGeneralInfoCountry。转到您的User模型并声明以下内容。

 public function userGeneralInfo()
 {
     return $this->hasOne('App\UserGeneralInfo', 'user_id', 'id');
 }


 public function userCountry()
 {
     return $this->hasOne('App\Country', 'user_id', 'id');
 }

现在查询时,请使用以下

$user = User:where('id, $id)->with('userGeneralInfo')->with('userCountry')->first();

这将为您提供用户及其相关的一般信息和用户所在的国家/地区。现在,您可以使用来访问变量。

$user->userGeneralInfo->phone检索电话号码。同样,$user-> userCountry->name获取国家名称。

注意:有多种方法可以得到您想要的结果,这是最简单的方法,供初学者理解。您可以了解有关laravel relationships

的复杂关系的更多信息