Laravel 分离数据透视表
Laravel detach Pivot tables
我是 Laravel 的新手,在尝试从数据透视表中分离一些值时遇到问题。
我正在使用的数据透视表是:
excercise_workout (ejercicio_rutina) & excise_day (ejercicio_dia) (这些表每个只有两个 id)。关系是多对多的。 一次锻炼有很多天,一天有很多运动。
我创建了这些路线:
路线::资源('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
你需要这样的东西:
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');
我通过以下方式解决了这个问题。首先我创建这条新路线:
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');
}
我是 Laravel 的新手,在尝试从数据透视表中分离一些值时遇到问题。
我正在使用的数据透视表是: excercise_workout (ejercicio_rutina) & excise_day (ejercicio_dia) (这些表每个只有两个 id)。关系是多对多的。 一次锻炼有很多天,一天有很多运动。
我创建了这些路线:
路线::资源('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
你需要这样的东西:
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');
我通过以下方式解决了这个问题。首先我创建这条新路线:
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');
}