如何使用eloquent从第二关系表中获取属性?

时间:2015-11-29 15:39:26

标签: laravel laravel-4 eloquent eager-loading

我需要有关如何使用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;

提前致谢

1 个答案:

答案 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;
         }
      }

    }
}