Я хочу дать всем пользователям возможность «отсоединить» строку от сводной таблицы — 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». Если нет, это означает, что пользователь не владеет им.
Я почти уверен, что я слишком усложняю вещи, но любая помощь будет принята с благодарностью.
Вы можете указать диапазон 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();
}
Других решений пока нет …