所以,就在这里。我有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
表中?还是我错过了什么?
谢谢。
答案 0 :(得分:0)
有多种处理方法。但是,最干净的方法之一是在用户模型中声明hasOne
关系并检索结果。
因此,假设您有三个模型,User
,UserGeneralInfo
和Country
。转到您的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
的复杂关系的更多信息