如何访问模型中定义的功能以进行查看?

时间:2019-01-05 15:01:19

标签: laravel laravel-blade

我的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)

提前谢谢。

3 个答案:

答案 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())