对于Eloquent,我有一个潜在的基本问题。我只想显示与该用户的角色相对应的名称。我使用了雄辩的关系ManytoMany。但我不能让它起作用。
我尝试使用$users
参数指向该名称,但这不起作用。
我的项目有三个文件,例如视图角色模型,StudentController,。
谢谢。
角色模型
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]);
}
}
My 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
发布于 2019-07-16 03:10:32
你有很多角色。这些角色中的每一个都有许多用户。您的表可以显示角色的名称、角色级别和角色说明,因为它们分别位于循环的$item
变量中。
问题是,当$item
保存这些单独的字段时,$item->users
是另一个用户对象集合。这意味着您已经在表中添加了另一个维度。您可能要在该<tr>
中容纳1或100个用户。
要进行演示,请尝试以下代码,特别是添加所有用户名(将参数添加到新循环中的每个用户对象):
@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
https://stackoverflow.com/questions/57036543
复制相似问题