Laravel — Проверьте, принадлежит ли ID сводной таблицы тому, кто его опубликовал.

Я хочу дать всем пользователям возможность «отсоединить» строку от сводной таблицы — alert_criteria, но только если они своя «критерии», который связан «критерием_идентификатора» в сводной таблице.

отношения

Оповещение принадлежит ко многим критериям.

Критерии принадлежат многим оповещениям.

Пользователь принадлежит к Критериям Многие.

В настоящее время они просматривают данные сводной таблицы через:

$matches = Criteria::whereUserId( Auth::id() )
->has('alerts')
->get();

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

На мой взгляд, я могу получить доступ к каждой строке сводной таблицы ID и отправить на контроллер через:

{{ Form::open(array('route' => array('archiveMatch', $alert->id), 'role'=>'form')) }}
@foreach($matches as $match)
@foreach($match->alerts as $alert)
{{$alert->id}}
@endforeach
@endforeach
{{ Form::close() }}

Я изначально думал о:

public function postArchiveMatch($id)
{
DB::delete('delete from alert_criteria where id = ?' , array($id));
}

Но я хочу проверить, действительно ли пользователь владеет этой строкой сводной таблицы. Насколько мне известно, любой, кто знает этот URL, может удалить строки сводной таблицы, даже если у них нет «критериев»:

  Route::post('users/match/destroy/{id}',
array('as' => 'archiveMatch', 'uses' => 'UsersController@postArchiveMatch'));

Единственное, что я могу придумать:

Получить criteria_id относящийся к alert_criteria.id, (из формы сообщения).

Получить все criteria где user_id знак равно auth::id

Проверьте, есть ли в списке «attribute_id». Если нет, это означает, что пользователь не владеет им.

Я почти уверен, что я слишком усложняю вещи, но любая помощь будет принята с благодарностью.

0

Решение

Вы можете указать диапазон criteria_id в вашем delete запрос, чтобы ограничить объем запроса. Я думаю о чем-то вроде:

public function postArchiveMatch($id)
{
$myCriteriaIds = Db::table('criteria')->select('id')
->where('user_id', '=', Auth::id())
->get()
->toArray();

$myCriteriaIds = explode(',', $myCriteriaIds);

DB::table->('alert_criteria')
->where('id', $id)
->where('criteria_id', 'IN', $myCriteriaIds)
->delete();
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]