Я действительно надеюсь, что меня не кричат на неопределенный вопрос, но я изо всех сил пытаюсь найти хороший ответ на этот вопрос.Я ищу наиболее эффективный способ проверки вложенных совпадений в шаблоне блейда 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
... это лучший способ, которым я могу это описать.
Я знаю, что, возможно, я спрашиваю об эффективности, которой просто не существует.