我正在使用ajax与我的销毁路线进行删除调用以获取模型。 一切正常,但控制器与数据库中的相应记录不匹配。
我拨打了api/serviceoperations/17
ajax 删除电话,但如果我以这种方式在我的控制器中放置var_dump
:
public function destroy(ServiceOperation $serviceOperation) {
var_dump($serviceOperation);die;
}
我得到一个不存在的空模型
public 'exists' => boolean false
我当然有一个名为 ServiceOperation 的模型引用表 service_operations ,其中包含主键 id
,在我的数据库中有一个记录,其中包含密钥17
。
为什么控制器没有解析我的id到db中相对记录的路径?
<小时/> 更新(已解决):
使用命令
创建模型,控制器和迁移php artisan make:model -m -c -r App\Models\ServiceOperation
无论如何,似乎laravel并没有很好地用一个世界来表达这个名字:
虽然上面的命令适用于一个单词表名称(即App \ Model \ Service),但它不适用于2个或更多,因为它不会自己绑定路径中传递的模型。 / p>
解决方案是在控制器中使用全小写字符的输入变量名 在我的例子中,控制器中的自动生成销毁功能是
public function destroy(ServiceOperation $serviceOperation) {
//model bind not working
}
但是模型绑定并没有起作用。
将参数更新为小写字符串,解决问题,模型绑定有效:
public function destroy(ServiceOperation $serviceoperation) {
//model bind working
}
答案 0 :(得分:4)
解决方案是在控制器中使用全小写字符的输入变量名 在我的例子中,控制器中的自动生成销毁功能是
public function destroy(ServiceOperation $serviceOperation) {
//model bind not working
}
但模型绑定无效。
将参数更新为小写字符串,解决问题,模型绑定有效:
public function destroy(ServiceOperation $serviceoperation) {
//model bind working
}
答案 1 :(得分:1)
试试这个:
public function destroy(ServiceOperation $serviceOperation, $id) {
$resource = $serviceOperation->find($id);
return $resource->delete();
}
看,如果有帮助。
答案 2 :(得分:1)
问题出在路由文件中提供的通配符中
Route::get('/serviceoperation/{wildcard}', 'PostsController@destroy');
{wildcard}
必须与您的控制器匹配
public function destroy(ServiceOperation $wildcard) {
//model bind working
}
只要这两个名称都匹配,只要通配符是id,模型绑定就将起作用
答案 3 :(得分:0)
你可以用这个东西解决 -> Laravel explicit bindings.
您可以在 RouteServiceProvider 启动方法中进行显式绑定,如下所示:
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
parent::boot();
Route::model('ServiceOperation', \App\ServiceOperation::class);
}