如何解决没有模型laravel的资源控制器的多对多关系
我是一名新的 php 程序员,我刚开始使用 laravel,我正在尝试构建一个库应用程序,目前我正在处理贷款部分。基本上我有一个名为 copy_user 的数据透视表,其中包含以下列:('copy_id','user_id','date','return_date','created_at','updated_at') copy_id 是其中之一可以链接到书籍表中的书籍的副本。基本上我在用户模型上有这个代码:
public function loanedCopies() {
return $this->belongsToMany(Copy::class)->withPivot('date','return_date');
}
在复制模型上我有:
public function loaningUsers() {
return $this->belongsToMany(User::class)->withPivot(['date','return_date']);
}
然后我为贷款创建了一个视图,它将显示表 copy_user 的内容,所以我还创建了一个 LoanController 和一个使用资源控制器的路由:
Route::resource('loans',LoanController::class);
现在我想要做的是使用资源而不使用模型来删除或编辑 copy_user 表上的记录,我正在尝试这样做:
视图上的代码:
<form action="/loans/{{$copy->id}}?user_id={{$user->id}}&date={{$copy->pivot->date}}" method="POST">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-link"><i class="fas fa-trash-alt"></i></button>
</form>
控制器中的代码:
public function destroy(Copy $copy)
{
$request = Request::capture();
$request->get('user_id');
$request->get('date');
$copy->loaningUsers()->where('id',$request->get('user_id'))->wherePivot('date',$request->get('date'))->detach();
return redirect('/loans');
}
现在的问题是 destroy 方法没有接收任何数据,所以它没有删除任何内容。我被特别告知要这样做而不使用贷款模型,但我不知道是否可能。使用资源控制器是我的决定,但我不知道这是否是正确的方法,有没有人知道为什么这不起作用?提前感谢每一个愿意回答的人!
解决方法
由于您的资源名为贷款,因此销毁方法将要求您使用 $loan 作为参数以绑定数据。
Route::resource('loans',LoanController::class); //This expects you to pass $loan
public function destroy(Copy $loan) { //Switch from $copy to $loan
}
您还可以通过使用以下方法检查路由来验证这一点:
php artisan route:list
,
谢谢 Vimona,刚刚回到那个项目,我通过执行以下操作放弃了资源控制器,转而使用正常的贷款路由:
Route::get('/loans','App\Http\Controllers\LoanController@index');
Route::delete('/loans/{copy}','App\Http\Controllers\LoanController@destroy');
在控制器上,我保留了原来的方法:
public function destroy(Copy $copy)
{
$request = Request::capture();
$request->get('user_id');
$request->get('date');
$copy->loaningUsers()->where('id',$request->get('user_id'))->wherePivot('date',$request->get('date'))->detach();
//$copy->loaningUsers()->detach();
return redirect('/loans');
}
通过这样做,现在删除方法工作正常,希望我没有犯任何错误,如果是这样,请告诉我,以便我可以尝试修复它!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。