【问题标题】:Laravel detach Pivot tablesLaravel 分离数据透视表
【发布时间】:2016-05-09 16:51:57
【问题描述】:

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

我正在使用的数据透视表是: excercise_workout (ejercicio_rutina) & excise_day (ejercicio_dia) (这些表每个只有两个 id)。关系是多对多。 锻炼有很多天,一天有很多锻炼。

我创建了这些路线:

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

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。而且我不知道post请求是怎么过去的。

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

@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 

【问题讨论】:

  • foreach ($rutina-&gt;dias as $dia) &lt;hr&gt; foreach ($dia-&gt;ejercicios as $ejercicio) &lt;ul&gt; &lt;li&gt;{{ $ejercicio-&gt;nombre }}&lt;/li&gt; &lt;/ul&gt; {!! Form::open([ 'method' =&gt; 'DELETE', 'action' =&gt; [ 'RutinasController@destroyEjercicio', $ejercicio-&gt;id ] ]) !!} {!! Form::submit('Borrar Ejercicio', ['class' =&gt; 'btn btn-danger']) !!} {!! Form::close() !!} endforeach &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; endforeach

标签: laravel request pivot-table laravel-facade


【解决方案1】:

你需要这样的东西:

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');

【讨论】:

  • 我理解你,它有道理,但我必须在哪里指定这个 $ejercicioId, $diasId ?在表格上?
  • 通常你有一个你填写的表格并将它发送到destroy()方法。因此,只需确保用户填满一天并锻炼并传递数据。如果您使用的是表单,则可以从 Request 对象中获取数据。请检查示例代码的更新答案。
  • 我更新所以你可以看到我的表格我没有输入要求它只是每个练习中插入的一个按钮
【解决方案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() !!}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-09
    • 2018-04-10
    • 1970-01-01
    • 2017-12-15
    • 2021-08-17
    • 1970-01-01
    • 2015-09-10
    • 2014-08-24
    相关资源
    最近更新 更多