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