此集合实例上不存在Property [name]。雄辩的Laravel

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (18)

对于Eloquent,我有一个潜在的基本问题。我想只显示与该用户的角色对应的名称。我使用了许多人的Eloquent Relationship。但我无法让它发挥作用。

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

我的项目有三个文件,如Role model,StudentControllerfind_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');
    }

}

我的学生控制器

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]);
    }
}

我的find_username视图

@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
提问于
用户回答回答于

你有很多角色。每个角色都有许多用户。您的表格可以正常显示角色名称,滚动级别和角色注释,因为它们分别位于循环$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

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励