Php 调用未定义的函数权限()

Php 调用未定义的函数权限(),php,laravel-5,relationship,Php,Laravel 5,Relationship,我已经使用Laravel 5.8创建了用户角色和权限。我正确地创建了用户和角色,但是当我在权限和角色之间创建多对多模型关系时,出现了一个错误,并说“调用未定义的函数permissions()”。我已经创建了一个getPermissions()方法来根据角色id检索所有权限。但laravel也说该方法需要是静态的。我不知道原因是什么。为什么permissions()关系方法不起作用 <?php namespace App\Models; use Illuminate\Database\E

我已经使用Laravel 5.8创建了用户角色和权限。我正确地创建了用户和角色,但是当我在权限和角色之间创建多对多模型关系时,出现了一个错误,并说“调用未定义的函数permissions()”。我已经创建了一个getPermissions()方法来根据角色id检索所有权限。但laravel也说该方法需要是静态的。我不知道原因是什么。为什么permissions()关系方法不起作用

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Support\Facades\Auth;

class Role extends Model
{
   public function users()
   {
    return $this->belongsToMany('App\Models\AdminUser', 'role_user', 'role_id', 'user_id');
   }

public function permissions()
{
    return $this->belongsToMany('App\Models\Permission', 'permission_role', 'role_id', 
    'permission_id');
}

public static function getPermissions()
{   
      if(Auth::guard('adminuser')->check()){

          $permissions = "Dashboard, Appointments, Customer Records"; 
          $admin_user_id = Auth::guard('adminuser')->user()->id;

          $role_id = 1;//roles()->select('id')->where('roles.id', $admin_user_id)->first();
          $per = permissions()->select($permissions)->where('permissions.id', $role_id)->first();

          return $per;
      }
}
}
permissions()
是一个实例方法,而不是类方法。 因此,必须在该类的实例上调用它

getPermissions()方法中,更改:

$per=permissions()->选择($permissions)->其中('permissions.id',$role\u id)->first();
进入

$per=$this->permissions()->select($permissions)->where('permissions.id',$role_id)->first();
permissions()
不能是静态的,因为它正在调用另一个实例方法(
$this->belongtomany()

编辑 糟糕的是,我没有看到
getPermissions
是静态的

您必须从
getPermissions()
中删除
static
关键字。不管怎样,那里有很多混合。您正在使用静态方法访问实例方法,这是错误的。

permissions()
是实例方法,而不是类方法。 因此,必须在该类的实例上调用它

getPermissions()方法中,更改:

$per=permissions()->选择($permissions)->其中('permissions.id',$role\u id)->first();
进入

$per=$this->permissions()->select($permissions)->where('permissions.id',$role_id)->first();
permissions()
不能是静态的,因为它正在调用另一个实例方法(
$this->belongtomany()

编辑 糟糕的是,我没有看到
getPermissions
是静态的



您必须从
getPermissions()
中删除
static
关键字。不管怎样,那里有很多混合。您正在使用静态方法访问实例方法,这是错误的。

错误在您的
getPermissions()
方法中,
permissions()
不存在,应该是
$this->permissions()
。也许不是static@kerbholz谢谢我添加了$this,但出现了“不应静态调用非静态方法App\Models\Role::getPermissions()”错误。我怎么解决这个问题?你把它变成非静态的了吗?使用类似于
$Role->getPermissions()
(非静态)@kerbholz yes的内容,而不是
Role::getPermissions()
(静态)。我做了非静态的更改,并将其更改为
$per=$this->permissions()..
@kerbholz我更改了它,但在我的刀片视图中,我添加了这个
{{App\Models\Role::getPermissions()->permissions}
,但出现了这个错误“不应该静态调用非静态方法App\Models\Role::getPermissions()”。如何在刀片视图中访问该模型方法?错误在您的
getPermissions()
方法中,
permissions()
不存在,应该是
$this->permissions()
。也许不是static@kerbholz谢谢我添加了$this,但出现了“不应静态调用非静态方法App\Models\Role::getPermissions()”错误。我怎么解决这个问题?你把它变成非静态的了吗?使用类似于
$Role->getPermissions()
(非静态)@kerbholz yes的内容,而不是
Role::getPermissions()
(静态)。我做了非静态的更改,并将其更改为
$per=$this->permissions()..
@kerbholz我更改了它,但在我的刀片视图中,我添加了这个
{{App\Models\Role::getPermissions()->permissions}
,但出现了这个错误“不应该静态调用非静态方法App\Models\Role::getPermissions()”。如何在blade view中访问该模型方法?谢谢。我更改了它,但在我的刀片视图中添加了这个
{{App\Models\Role::getPermissions()->permissions}
,但出现了这个错误“不应静态调用非静态方法App\Models\Role::getPermissions()。如何在blade view中访问该模型方法?
{{App\Models\Role::getPermissions()
永远不会工作。您正在尝试以静态方式调用实例方法。您必须拥有该类的实例,然后调用
getPermissions()
在那个对象上!非常感谢。你能告诉我怎么做吗。我对laravel是新手。我创建了一个实例。
$role\u id=1;$per=$this->permissions()->select('permissions')->where('permissions.id',$role\u id)->first();dd($per)
此返回null,有什么问题吗?谢谢。我更改了它,但在刀片视图中添加了此
{{App\Models\Role::getPermissions()->permissions}
但出现了此错误“不应静态调用非静态方法App\Models\Role::getPermissions()”。我如何在刀片视图中访问该模型方法?
{{App\Models\Role::getPermissions()
永远不会工作。您正在尝试以静态方式调用实例方法。您必须拥有该类的实例,然后调用
getPermissions()
关于那个对象!非常感谢。你能告诉我怎么做吗。我是拉威尔的新手。我创建了一个实例。
$role\u id=1;$per=$this->permissions()->select('permissions')->where('permissions.id',$role\u id)->first();dd($per);
这个返回空值,有什么问题吗?