我的laravel模型功能:
public function isAdminOrSuperAdmin()
{
return $this->role() == config('custom_config.constants.user_types.SUPER_ADMIN')
|| $this->role() == config('custom_config.constants.user_types.ADMIN');
}
我尝试在视图中访问:
@if($user->isAdminOrSuperAdmin())
<a class="btn btn-primary pull-right" style="margin-top:
-10px;margin-bottom: 5px" href="{!! route('admin.users.create') !!}">
Add New
</a>
@endif
但显示错误:
方法Illuminate \ Database \ Eloquent \ Collection :: isAdminOrSuperAdmin不存在。 (查看:/resources/views/admin/users/index.blade.php)
提前谢谢。
答案 0 :(得分:1)
检查错误:
方法Illuminate \ Database \ Eloquent \ Collection :: isAdminOrSuperAdmin不存在。 (查看:/resources/views/admin/users/index.blade.php)
这意味着,您正在尝试在Collection
实例上而不是实际的User
模型实例上调用模型的方法。
从数据库中查询多个项目时,Laravel返回Collection
类的实例,该实例包含所有生成的模型对象。
也许您正在做这样的事情:
public function aCoolFunction()
{
$user = User::where('column', 'value')
->get(); // <-----
return view('my_view')->with('user', $user);
}
get()
方法返回一个Collection
,而不是单个元素。
请尝试使用first()
:
public function aCoolFunction()
{
$user = User::where('column', 'value')
->first(); // <-----
return view('my_view')->with('user', $user);
}
现在,您认为$user
变量将实际保存您的User
模型用户的实例,该用户在其中定义了isAdminOrSuperAdmin()
方法,而不是方法的集合。
答案 1 :(得分:0)
我认为这不是最好的方法,但是您可以使用控制器将函数传递给视图:
在您的控制器中:
public function index(User $user)
{
$ModelFunction = $user->yourModelFunction();
return View('test',compact('user','ModelFunction'));
}
在您的视图中:
{{ $ModelFunction }}
答案 2 :(得分:-1)
您必须这样调用函数:
@if(is_admin_or_super_admin())