Laravel отсоединить сводные таблицы

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

Сводные таблицы, с которыми я работаю: excercise_workout (ejercicio_rutina) и excise_day (ejercicio_dia) (у каждой из этих таблиц всего два идентификатора). Отношения ManyToMany. У тренировки много дней, а у дня много упражнений.

Я создал эти маршруты:

Route::resource('rutinas','RutinasController'); Route::delete('rutinas.destroyEjercicio/{id}','RutinasController@destroyEjercicio');

У меня есть эта кнопка, которая является формой и вызывает удаление:

                {!! Form::open([
                    'method' => 'DELETE',
                    'action' => [ 'RutinasController@destroyEjercicio', $ejercicio->id ]
                ]) !!}
                    {!! Form::submit('Borrar Ejercicio', ['class' => 'btn btn-danger']) !!}
                {!! Form::close() !!}

DestructionEjercicio - это та часть, с которой я не знаю, как справиться:

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 

person portobello francisco    schedule 09.05.2016    source источник


Ответы (2)


Вам нужно что-то вроде этого:

public function destroyEjercicio($ejercicioId, $diasId)
{
    $ejercicio = Ejercicio::findOrFail($ejercicioId);

    $ejercicio->dias()->detach($diasId);

https://laravel.com/docs/5.1/eloquent-relationships#inserting-many-to-many-relationships

Обновить

Как использовать объект запроса. Если вы используете формы, объект Reuqest будет содержать все поля формы. Просто сделайте что-то вроде этого:

public function destroyEjercicio(Request $request)
{
    $ejercicioId = $request->get('ejercicioIdField');

    $diasId = $request->get('diasIdField');
person Alexey Mezenin    schedule 09.05.2016
comment
Я вас понимаю и в этом есть смысл, но где мне указать эти $ejercicioId, $diasId ? На форме? - person portobello francisco; 09.05.2016
comment
Обычно у вас есть форма, которую вы заполняете и отправляете destroy() методу. Поэтому просто убедитесь, что пользователь заполняет день, выполняет упражнения и передает данные. Если вы используете формы, вы можете получить данные из объекта запроса. Пожалуйста, проверьте обновленный ответ, например код. - person Alexey Mezenin; 09.05.2016
comment
Я обновляю, чтобы вы могли видеть мою форму, у меня нет входных данных для запроса, это просто кнопка, вставленная в каждое упражнение. - person portobello francisco; 09.05.2016

Я решил это следующим образом. Сначала я создаю этот новый маршрут:

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');
}
person portobello francisco    schedule 09.05.2016