【发布时间】:2017-04-10 13:00:11
【问题描述】:
当我尝试检查用户是否具有某些角色时,我在视图中收到此错误。确切的错误是 调用未定义方法 Illuminate\Database\Query\Builder::role() (查看:C:\xampp\htdocs\laravel-projects\acl\resources\views\admin.blade.php
这里是 admin.blade.php 代码
@foreach($users as $user)
<tr>
<td>{{$user->name}}</td>
<td>{{$user->email}}</td>
<td><input type="checkbox" {{ $user->hasRole('User') ? 'checked' : '' }} name="role_user"></td>
<td><input type="checkbox" {{ $user->hasRole('Author') ? 'checked' : '' }} name="role_author"></td>
<td><input type="checkbox" {{ $user->hasRole('Admin') ? 'checked' : '' }} name="role_admin"></td>
<td>{{$user->name}}</td>
<td>{{$user->email}}</td>
</tr>
@endforeach
hasRole() 是用户模型中的一个函数。但是从错误中它抛出未定义的方法角色()。但是没有称为role()的方法
这是我的控制器
class AdminController extends Controller
{
public function index()
{
$user_details = User::all();
return view('admin')->with('users' , $user_details);
}
}
在从数据库中获取数据时,我也确实包含了该方法,例如
$user_details = User::with('hasRole')->get();
即使这样也没有用。
这是我的用户模型。
<?php
namespace App;
use App\Role;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
public function roles()
{
return $this->belongsToMany('App\Role','user_role','user_id','role_id');
}
public function hasAnyRole($roles)
{
if(is_array($roles)){
foreach ($roles as $role) {
if ($this->hasRole($role)) {
return true;
}
}
}
else{
if ($this->hasRole($roles)) {
return true;
}
}
return false;
}
public function hasRole($role)
{
if ($this->role()->where('name',$role)->first()) {
return true;
}
return false;
}
}
【问题讨论】: