我正在尝试在数据库中显示具有特定角色的用户我有3个角色:供应商,客户和管理员。我想在show.blade.php中列出供应商,并且必须得到管理员的批准
这是我的控制器
public function operators(){
$users = User::all();
return view('User::frontend.profile.show', compact('users'));
}
和我的看法
<div class="list-item">
<div class="row">
@foreach($users as $user)
@if (count($users)>0)
<div class="page-profile-content page-template-content">
<div class="container">
<div class="">
<div class="row">
<div class="col-md-3">
听起来,您想让有关用户的其他数据可用于显示,并且还希望限制与您合作的用户。应用这些规则的最佳位置是在查询数据库时。在不了解实现细节的情况下,我无法知道确切的语法,但在以下方面,您会有所了解:
$users = User::all();
由管理员批准:此批准过程是否等同于User表上的bool列设置为true?如果没有,它可能应该。然后,您可以将查询修改为以下内容:
$users = User::where('is_approved', '=', 1)->get();
现在,您只加载要使用的用户,这有助于使查询尽可能快,并避免在显示数据时对数据进行任何其他逻辑检查。
对于角色,您可能需要查看数据库中的其他表?确保已在模型上定义了关系,然后还可以向查询中添加whereHas()
子句。
$users = User::where('is_approved', '=', 1)->whereHas('roles', function($query){ $query->where('name','=', 'vendor');})->get();
很难在一行上阅读,但可以使其更容易阅读。这是在更整洁的布局中的相同查询:
$users = User::query()
->where('is_approved', '=', 1)
->whereHas('roles', function($query){
$query->where('name','=', 'vendor');
})
->get();
[roles
应等于用户模型上关系的名称,name
是角色表中名称所在的字段。
在https://laravel.com/docs/master/eloquent-relationships#querying-relationship-existence中有更详细的解释
https://laravel.com/docs/master/eloquent#retrieving-models处还有一些很好的信息,可能值得回顾。
我希望这会有所帮助!