Поиск вложенных результатов внутри шаблона лезвия Laravel - PullRequest
0 голосов
/ 23 ноября 2018

Я действительно надеюсь, что меня не кричат ​​на неопределенный вопрос, но я изо всех сил пытаюсь найти хороший ответ на этот вопрос.Я ищу наиболее эффективный способ проверки вложенных совпадений в шаблоне блейда Laravel.

Я отлично разбираюсь в PHP, но все еще привыкаю к ​​использованию фреймворка и пытаюсь уйти направая (и самая эффективная) нога с ним.

У меня есть страница редактирования пользователя, для которой моему пользователю назначены разрешения.Как и на форуме, есть буквально сотни разрешений на выбор.

Отображается страница редактирования, а внизу есть таблица возможных разрешений с переключателем для выбора да / нет.

@foreach($permissionsAvailable as $permission)
    <tr>
        <td class="hub3Blue hub3FontSmall">{{ $permission->name }}</td>
        <td class="hub3FontSmall">{{ $permission->description }}</td>
        <td>
            <form name="{{$permission->id}}">
                <div class="form-group">
                    <div class="form-check form-check-inline">
                        <input class="form-check-input permissionCheck" type="radio" id="{{$permission->id}}"
                               onclick="sendPermission('{{$permission->id}}','yes')" name="hasPermission">
                        <label class="form-check-label" for="hasPermission">Yes</label>
                    </div>
                    <div class="form-check form-check-inline">
                        <input class="form-check-input permissionCheck" type="radio" id="{{$permission->id}}"
                               onclick="sendPermission('{{$permission->id}}','no')" name="hasPermission">
                        <label class="form-check-label" for="hasPermission">No</label>
                    </div>
                </div>
            </form>
        </td>
    </tr>
@endforeach

Существует функция jQuery для обновления таблицы access_user, добавляя или удаляя разрешение.Это отлично.Я пытаюсь добиться того, чтобы все переключатели «да / нет» были проверены, или нет, но я борюсь с «наилучшей практикой».

Я подумал, что самое простоеможно было бы включить функцию PHP внизу страницы, но для этого нужно было бы запрашивать базу данных для каждой итерации, чтобы узнать, было ли предоставлено разрешение этому пользователю.

Другой способ, который я предполагаю, состоит в том, чтобыприведите таблицу разрешений полностью в шаблон блэйда, то есть уплотните ее с другими данными, а затем сравните с данными массива.Я предполагаю, что быстрее, но все еще много работаю.Если бы у меня было 100 пользователей с 100 возможными разрешениями, это [потенциально] массив из 10 000 записей.

Некоторые рекомендации были бы очень полезны, ребята.

Структура / отношения SQL

Table: permission_user
+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| id            | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| permission_id | int(10) unsigned | NO   | MUL | NULL    |                |
| user_id       | int(10) unsigned | NO   | MUL | NULL    |                |
| created_at    | timestamp        | YES  |     | NULL    |                |
| updated_at    | timestamp        | YES  |     | NULL    |                |
+---------------+------------------+------+-----+---------+----------------+

Таким образом, поскольку таблица разрешений зациклена, необходимо проверить каждый permission_id, чтобы увидеть, существует ли у него строка, соответствующая user_id.

check if [row_exists] in permission_user WHERE permission_id = permission_id AND user_id = user_id

... это лучший способ, которым я могу это описать.

Я знаю, что, возможно, я спрашиваю об эффективности, которой просто не существует.

1 Ответ

0 голосов
/ 24 ноября 2018

ОК, так что я делал это не с того конца, что, как мне кажется, показывает мой начинающий уровень использования Laravel / Eloquent.Я должен был получить все разрешения, доступные при загрузке страницы в моем пользовательском контроллере, а затем передать этот массив моему шаблону блейда для проверки.

Сначала получить все разрешения моих пользователей в моем контроллере:

$userPermissions= AdminUsersPermissions::where('user_id', $id)->get();
return view('admin.users.edit',compact('user','permissionsAvailable','userPermissions')); 

Затем в моем шаблоне блэйда:

foreach($userPermissions as $permission)
  {
    $hasPermissions[] = $permission->permission_id;
  }

Затем, когда я перебираю права доступа, я могу сказать:

$checkedNo = "checked";
$checkedYes = "";
if(in_array({{$permission->id}}, $hasPermissions)
{
  $checkedYes = "checked";
  $checkedNo = ""; 
}

Для записи формы:

<div class="form-check form-check-inline">
  <input class="form-check-input permissionCheck" type="radio" id="{{$permission->id}}" onclick="sendPermission('{{$permission->id}}','yes')" name="hasPermission" <?=$checkedYes;?> >
  <label class="form-check-label" for="hasPermission">Yes</label>
</div>
<div class="form-check form-check-inline">
  <input class="form-check-input permissionCheck" type="radio" id="{{$permission->id}}" onclick="sendPermission('{{$permission->id}}','no')" name="hasPermission" <?=$checkedNo;?> >
  <label class="form-check-label" for="hasPermission">No</label>
</div>

Ну, это лучшее, что я могу придумать в любом случае: /

...