我需要有关如何使用eloquent获取关系表属性的帮助。我正在构建HTML表中的用户列表,并希望使用雄辩的关系显示三个表连接在一起的信息
示例:
我有3个表用户,users_profile和branch。每个用户可以拥有一个配置文件和一个分支,每个分支可以拥有多个用户。
users
---
id
username
email
users_profile
-----
id
user_id
branch_id
fullname
address
branch
-----
id
branch_name
用户模型
public function user_info()
{
return $this->hasOne('User_info','user_id','id');
}
User_info模型
public function user() {
return $this->belongsTo('User');
}
public function branch() {
return $this->belongsTo('Branch');
}
分支模型
public function user_info()
{
return $this->hasMany('User_info','branch_id','id');
}
用户控制器
public function index()
{
$users = User::with('user_info')->get();
foreach($users as $value)
{
//show data from table users
echo $value->username;
echo $value->email;
//show data from table user_info
echo $value->user_info->fullname;
echo $value->user_info->address;
//how to display data from table branch?
//this code below will trigger property error
echo $value->user_info->branch->branch_name;
}
}
问题是如何在列表中显示表分支中的数据,因为下面的代码将触发尝试获取非对象错误的属性。
我怀疑如何构建急切加载有一些错误,但无法找到正确的方法。
echo $value->user_info->branch->branch_name;
提前致谢
答案 0 :(得分:0)
我在这里看不到任何错误,在显示关系中的任何属性之前,您应该确保它确实存在。例如,用户可能没有user_info
,如果有,则user_info
可能没有nay分支。
因此,正确的显示代码应如下所示:
public function index()
{
$users = User::with('user_info')->get();
foreach($users as $value)
{
//show data from table users
echo $value->username;
echo $value->email;
//show data from table user_info
if ($value->user_info) {
echo $value->user_info->fullname;
echo $value->user_info->address;
//how to display data from table branch?
//this code below will trigger property error
if ($value->user_info->branch) {
echo $value->user_info->branch->branch_name;
}
}
}
}