Сокращение повторяющихся запросов в моем приложении laravel - PullRequest
1 голос
/ 28 февраля 2020
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;

class PermissionController extends Controller {

    public function set_permission(Request $request)
    {

        $id = $request['roleId'];

        $role = Role::findById($id);


        $all_permissions = $request['checkedId'];


        $role->syncPermissions();


        foreach ($all_permissions as $per)
        {

            $role->givePermissionTo($per);

        }
    }

}

Я использую spat ie -permission-package в моем приложении laravel. Приложение предлагает такую ​​функциональность, что администратор может вручную дать конкретное c разрешение на указанное c правило. Фрагмент кода был добавлен. Он работает нормально, но проблема в том, что он выполняет намного больше запросов. как может понадобиться уменьшить этот избыточный или дублирующий запрос.

Вот изображение для моих запросов

Ответы [ 3 ]

0 голосов
/ 28 февраля 2020

Основываясь на том, что я вижу на https://docs.spatie.be/laravel-permission/v3/advanced-usage/seeding/, я считаю, $role->givePermissionTo() может принимать массив разрешений, а также одно разрешение.

Все ли работает как положено, если вы измените

   foreach ($all_permissions as $per)
        {
            $role->givePermissionTo($per);
        }

на

$role->givePermissionTo($all_permissions);

?

0 голосов
/ 28 февраля 2020

Вам не нужно синхронизировать c пустые разрешения, а затем назначать их в foreach l oop, у вас уже есть все идентификаторы разрешений, переданные в запросе, поэтому просто синхронизируйте c их

$role->syncPermissions($all_permissions);
// you don't need foreach loop here any more
0 голосов
/ 28 февраля 2020

Вместо зацикливания разрешений вы можете сделать следующее.

$role->givePermissionTo($all_permissions);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...