Laravel分离Pivot表

时间:2016-05-09 16:51:58

标签: laravel request pivot-table laravel-facade

我是Laravel的新手,当我尝试从数据透视表中分离一些值时,我遇到了问题。

与我一起工作的数据透视表是: excercise_workout(ejercicio_rutina)& excise_day(ejercicio_dia)(这些表只有两个id' s)。关系是ManyToMany。 锻炼有很多天,一天有很多锻炼。

我创建了这些路线:

路线::资源(' rutinas'' RutinasController&#39); 路线::删除(' rutinas.destroyEjercicio / {ID}',' RutinasController @ destroyEjercicio&#39);

我有一个表格的这个按钮并调用删除:

                {!! 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()

我尝试了很多其他方法,但我不知道该怎么做。

我需要知道当天的ID和我要删除的练习的ID。而且我不知道邮寄请求过去的情况。

更新 - >这是我没有要求输入的表格......

@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 个答案:

答案 0 :(得分:0)

你需要这样的东西:

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

<强>更新

如何使用Request对象。如果您正在使用表单,Reuqest对象将包含所有表单域。做这样的事情:

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

    $diasId = $request->get('diasIdField');

答案 1 :(得分:0)

我通过以下方式解决了这个问题。首先,我创建这条新路线:

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() !!}

然后在你的控制器中传递你需要的两个id:

public function destroyEjercicio($ejercicioId, $diaId)
{
    $ejercicio = Ejercicio::findOrFail($ejercicioId);
    $ejercicio->dias()->detach($diaId);
    return redirect('rutinas');
}