Laravel detach Pivot Столы
Я новичок в Laravel и у меня проблемы, когда я пытаюсь отсоединить некоторые значения от моих сводных таблиц.
Сводные таблицы, с которыми я работаю, это: excercise_workout (ejercicio_rutina) и excise_day (ejercicio_dia) (у этих таблиц всего два идентификатора в каждой). Отношения много-много. У тренировки много дней, а в день много упражнений.
Я создал эти маршруты:
Route:: ресурсов ('Rutinas','RutinasController'); Route:: удалить ('rutinas.destroyEjercicio/{идентификатор}','RutinasController@destroyEjercicio');
У меня есть эта кнопка, которая является формой и вызывает удаление:
{!! Form::open([
'method' => 'DELETE',
'action' => [ 'RutinasController@destroyEjercicio', $ejercicio->id ]
]) !!}
{!! Form::submit('Borrar Ejercicio', ['class' => 'btn btn-danger']) !!}
{!! Form::close() !!}
DestroyEjercicio - это та часть, с которой я не знаю, как справиться:
public function destroyEjercicio($id)
{
$ejercicio = Ejercicio::findOrFail($id);
dias()->$ejercicio->detach($id);
//EXAMPLE DELETE WITH QUERY
// DB::delete('delete from toy_user where toy_id = ? AND user_id = ? AND status = 0', array($toy->id,Auth::id()));
return redirect('rutinas');
}
Я получаю эту ошибку при попытке отправить форму для удаления: вызов неопределенной функции App\Http\Controllers\dias()
Я пробовал много других методов, но я не знаю, как это сделать.
Мне нужно знать идентификатор дня и идентификатор упражнения, которое я хочу удалить. И я не знаю, как прошло его по почтовому запросу.
ОБНОВЛЕНИЕ -> ЭТО ФОРМА, У которой У меня НЕ ВХОДЯТ ЗАПРОСЫ...
@foreach ($rutina->dias as $dia)
<div class="col-md-6 col-md-offset-3">
<div class="panel panel-default">
<div class="panel-body">
Ejercicios para el <strong>{{ $dia->nombre }}</strong>
<hr>
@foreach ($dia->ejercicios as $ejercicio)
<ul>
<li>{{ $ejercicio->nombre }}</li>
</ul>
{!! Form::open([
'method' => 'DELETE',
'action' => [ 'RutinasController@destroyEjercicio', $ejercicio->id ]
]) !!}
{!! Form::submit('Borrar Ejercicio', ['class' => 'btn btn-danger']) !!}
{!! Form::close() !!}
@endforeach
</div>
</div>
</div>
@endforeach
2 ответа
Я решил это следующим образом. Сначала я создаю этот новый маршрут:
Route::post('rutinas.destroyEjercicio/{ejercicioId}/{diaId}', [
'as' => 'destroy',
'uses' => 'RutinasController@destroyEjercicio'
]);
Вы должны добавить этот массив в форме:
{!! Form::open([
'method' => 'POST',
*******'route' => ['destroy', $ejercicio->id, $dia->id]******
]) !!}
{!! Form::submit('Borrar Ejercicio', ['class' => 'btn btn-danger']) !!}
{!! Form::close() !!}
Затем в вашем контроллере вы передаете два идентификатора, которые вам нужны:
public function destroyEjercicio($ejercicioId, $diaId)
{
$ejercicio = Ejercicio::findOrFail($ejercicioId);
$ejercicio->dias()->detach($diaId);
return redirect('rutinas');
}
Вам нужно что-то вроде этого:
public function destroyEjercicio($ejercicioId, $diasId)
{
$ejercicio = Ejercicio::findOrFail($ejercicioId);
$ejercicio->dias()->detach($diasId);
https://laravel.com/docs/5.1/eloquent-relationships
Обновить
Как использовать объект запроса. Если вы используете формы, объект Reuqest будет содержать все поля формы. Просто сделайте что-то вроде этого:
public function destroyEjercicio(Request $request)
{
$ejercicioId = $request->get('ejercicioIdField');
$diasId = $request->get('diasIdField');