属性[名称]在此集合实例上不存在。雄辩的Laravel

时间:2019-07-15 09:10:58

标签: laravel eloquent

我对于Eloquent有一个潜在的基本问题。我只想显示与该用户的角色对应的名称。我使用了很多很多口才的关系。但是我无法解决这个问题。

我尝试使用$users参数指向名称,但这没用。

我的项目有三个文件,例如角色模型, StudentController find_username视图

谢谢。

角色模型

class Role extends Model
{
    protected $fillable = ['id','role_name','role_level','role_note'];

    public function users()
    {
        return $this->belongsToMany('App\User', 'role_users', 'user_id', 'role_id');
    }

}

我的 StudentController

class StudentController extends Controller
{
    public function find_username()
    {
        $roles = Role::all();

        foreach($roles as $role)
        {
            echo $role->users . '<br>';
        }
        return view('find_username',['roles'=> $roles]);
    }
}

我的查找用户名视图

@extends('master')
@section('content')
<div class="row">
    <table class="table">
        <thead>
            <tr>
                <th>ID Role</th>
                <th>Role name</th>
                <th>Role level</th>
                <th>Role note</th>
                <th>User name</th>
            </tr>
        </thead>
        <tbody>
            @foreach ($roles as $item)
                <tr>
                <td>{{$item['id']}}</td>
                <td>{{$item['role_name']}}</td>
                <td>{{$item['role_level']}}</td>
                <td>{{$item['role_note']}}</td>
                <td>{{$item->users}}</td>
                </tr>
            @endforeach
        </tbody>
    </table>
</div>
@endsection

1 个答案:

答案 0 :(得分:0)

您有许多角色。这些角色中的每一个都有许多用户。您的表格可以很好地显示角色名称,角色级别和角色说明,因为它们分别位于循环的$item变量中。

问题在于,尽管$item保留了这些奇异字段,但$item->users是用户对象的另一个集合。这意味着您已经在表中添加了另一个维度。您可能有1或100个用户适合该<tr>

为演示,请尝试以下代码,特别是添加所有用户名(在新循环中将参数添加到每个用户对象):

@foreach ($roles as $item)
   <tr>
    <td>{{$item['id']}}</td>
    <td>{{$item['role_name']}}</td>
    <td>{{$item['role_level']}}</td>
    <td>{{$item['role_note']}}</td>
    @foreach($item->users as $user)
       <td>
         {{$user->name}}
         {{$loop->last?"":" | "}}  //<-- just to separate names for this test
       </td>
    @endforeach
   </tr>
@endforeach

如果正确设置了模型和关系,这将向您显示每个角色的用户。但是,如您所见,这可能不是显示此数据的最佳方法。每个角色可能有数十个用户。您不妨考虑为每个角色的用户制作一个完全独立的表。也许单击此表上该角色的内容,然后显示具有该角色的用户的新列表或表。

HTH