Laravel缓存数据库查询

问题描述 投票:0回答:2

我已经创建了具有用户角色和权限的项目

这是我的表和模型

[users-应用程序用户列表-型号名称[User],

[roles-应用程序内部可用的角色列表-型号名称[Role],

permissions-应用程序中可用的Permisisons列表-型号名称[Permisions],

这是我的关系表

[role_user保持roles表与users表之间的关系

[permission_role保持permissions表与roles表之间的关系

[permission_user保持permissions表与users表之间的关系

我在模型中的关系代码

User.php模型

/**
     * Many-to-Many relations with Role.
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
    /**
     * Many-to-Many relations with Permission.
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function permissions()
    {
        return $this->belongsToMany(Permission::class);
    }

   public function hasPermission($permission)
    {
        return $this->hasPermissionThroughRole($permission) || (bool) $this->permissions->where('name',$permission->name)->count();
    }

    public function hasPermissionThroughRole($permission)
    {
        foreach($permission->roles as $role)
        {
            if($this->roles->contains($role))
            {
                return true;
            }
        }
        return false;
    }

    public function hasRoles($roles)
    {
        $roles = is_array($roles) ? $roles : func_get_args();
        foreach ($roles as $role) 
        {
            if ($this->hasRole($role)) 
            {
                return true;
            }
        }
        return false;
    }
    /**
     * Returns if the given user has an specific role.
     *
     * @param string $role
     *
     * @return bool
     */
    public function hasRole($role)
    {
        return $this->roles
            ->where('name', $role)
            ->first() != null;
    }

Role.php模型

/**
     * Many-to-Many relations with Permissions.
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function permissions()
    {
        return $this->belongsToMany(Permission::class);
    }
    /**
     * Many-to-Many relations with Users.
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function users()
    {
        return $this->belongsToMany(User::class);
    }

Permission.php模型

/**
     * Belongs-to-Many relations with Role.
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
    /**
     * Belongs-to-Many relations with User.
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function users()
    {
        return $this->belongsToMany(User::class);
    }
    /**
     * Belongs-to-Many relations with Modules.
     *
     * @return \Illuminate\Database\Eloquent\Relations\belongsToMany
     */

然后最后我创建了名为ServiceProvider

PermissionServiceProvider

并且在serviceprovider的启动方法内部,我已经添加了代码

public function boot()
    {
        if (Schema::hasTable('permissions'))
        {         
             Permission::get()->map(function ($permission) 
             {
                 Gate::define($permission->name, function ($user) use ($permission) 
                {
                     return $user->hasPermission($permission);
                 });
             });


        }

        Blade::directive('role', function ($role)
            {
               return "<?php if(Auth::user()->hasRole({$role})): ?>";
            });
        Blade::directive('endrole', function ($role)
            {
                return "<?php endif; ?>";
            });
    }

每个功能和关系都正常工作,但是每次我按下刷新按钮Running Queries时查询都在运行”>

有什么方法可以缓存所有权限和角色以登录用户

已编辑

根据我尝试过的laravel缓存包的一些建议

它对我不起作用

我已经创建了具有用户角色和权限的项目,这是我的表和模型用户-应用程序用户的列表-模型名称[用户],角色-可用的角色列表...

laravel-5.7
2个回答
2
投票

您正在寻找laravel模型缓存包https://github.com/GeneaLabs/laravel-model-caching

我建议安装带有Redis的软件包。在使用队列时,它也非常有用。


0
投票

我认为以下laravel扩展名可能有用:

© www.soinside.com 2019 - 2024. All rights reserved.