Laravel gate错误,没有这样的表:权限(SQL:select * from“permissions”)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel gate错误,没有这样的表:权限(SQL:select * from“permissions”)相关的知识,希望对你有一定的参考价值。

对于laravel测试环境,Laravel gate无法正常工作。在phpunit.xml文件中,我使用sqlite连接和:memory:作为数据库。

<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>

AuthServiceProvider,我正在定义门,如下面的代码所示。

public function boot(GateContract $gate)
{
    $this->registerPolicies($gate);


    foreach($this->getPermissions() as $permission) {
        $gate->define($permission->name, function($user) {
            $user->hasRole($permission->roles);
        });
    }
}

protected function getPermissions() {
    return Permission::with('roles')->get();
}

所以,什么时候我运行phpunit。它显示错误no such table: permissions (SQL: select * from "permissions")

那么,请指导我如何在迁移后为测试环境定义门。

答案

试试这个 :

  foreach($this->getPermissions() as $permission) {
            $gate->define($permission->name, function($user)use($permisson) {
                $user->hasRole($permission->roles);
            });
        }

如果你不使用use($permission),$ permission将是未定义的...

以上是关于Laravel gate错误,没有这样的表:权限(SQL:select * from“permissions”)的主要内容,如果未能解决你的问题,请参考以下文章

laravel权限控制Gate

Laravel 8 Gate 基于数据库工匠迁移错误中的级别

laravel 测试出错:SQLSTATE[HY000]:一般错误:1 没有这样的表:用户

Laravel 的用户授权

没有调用Laravel Gate方法

laravel5 权限说明