我对于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
答案 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