首页 > 解决方案 > Laravel - 获取与同一模型的关系值

问题描述

我有我的用户表,它有一个 ID 和一个 comes_from (id),它指向同一个用户表的 id 列。

例如:

User
id, comes_from
1,  null
2,  1 

所以 ID 为 2 的用户来自 ID 为 1 的用户

现在我正在尝试构建它。

我想打印出一个包含我拥有的所有用户的表格和另一个表格列,它给了我当前行用户来自的用户的电子邮件。

我的用户模型:

public function recruited()
    {
        return self::findOrFail($this->comes_from)->pluck('email', 'id');
    }

现在在我的控制器中:

  public function recruitedUsersList()
    {
        return view('admin.recruitedUsers')->with('users', User::all()->with('recruited'));
    }

这告诉我“调用未定义的方法”

在我的刀片中:

@foreach($users as $user)
       <tr>
             <td>{{ $user->id }}</td>
             <td>{{ $user->email }}</td>
             <td>{{ $user->name }}</td>
             <td>{{ $user->recruited()->email }}</td>
       </tr>
@endforeach

嗯..这对我不起作用。有人有想法吗?

想法是:

一个用户只能来自一个人。他在注册自己时获得“comes_from (id)”用户可以招募任意数量的人。

标签: phplaravel

解决方案


注意:我假设一个人可以在您的申请中招募多个其他人。所以我认为hasMany关系最好地描述了这一点。

更新User模型中的函数

public function recruited()
{
   return $this->hasMany('App\User', 'comes_from');
}

将您的控制器更新为此

public function recruitedUsersList()
{
    return view('admin.recruitedUsers')->with('users', User::with('recruited')->get());
}

将您的视图逻辑更新为此

@foreach($users as $user)
   <tr>
         <td>{{ $user->id }}</td>
         <td>{{ $user->email }}</td>
         <td>{{ $user->name }}</td>
         <td>
            @foreach($user->recruited as $recruit)
               {{ $recruit->email }}, 
            @endforeach
         </td>
   </tr>
@endforeach

推荐阅读