2017-04-27 36 views
0

我正在使用ajax进行删除调用,以销毁模型的路由。 一切正常,除了控制器不匹配数据库中的相应记录。Laravel Eloquent:路由模型绑定与多字表名不起作用

我叫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个或更多的单词一起使用,因为它不会自己绑定路由中传递的模型。

解决方法是在控制器中使用输入变量名,全部使用小写字母。
在我的情况下,自动生成的在控制器破坏作用是

public function destroy(ServiceOperation $serviceOperation) { 
     //model bind not working 
    } 

但模型绑定不能正常工作。

更新参数为小写串,解决问题,模型绑定工作:

public function destroy(ServiceOperation $serviceoperation) { 
     //model bind working 
    } 
+0

你是如何删除模型对象? –

+0

用'$ serviceOperation-> delete();',但这不是问题。破坏函数参数不能通过口才解决,因为它应该。 – GiuServ

+0

我已经添加了一个片段,试试。 –

回答

2

解决方法是在控制器中使用输入变量名,全部使用小写字母。
在我的情况下,自动生成的在控制器破坏作用是

public function destroy(ServiceOperation $serviceOperation) { 
     //model bind not working 
    } 

但模型绑定不能正常工作。

更新参数为小写串,解决问题,模型绑定工作:

public function destroy(ServiceOperation $serviceoperation) { 
     //model bind working 
    } 
1

试试这个:

public function destroy(ServiceOperation $serviceOperation, $id) { 
    $resource = $serviceOperation->find($id); 

    return $resource->delete(); 
} 

看,如果没有什么帮助。

+1

之前阅读[something](https://laravel.com/docs/5.4/routing#route-model-binding)它应该有效,但这是不是重点。它也可以用于'public function destroy($ serviceOperation)',但是雄辩的“力量”是将自己的id解析为模型 – GiuServ

+0

对不起,我没有得到你。 –

+1

我说的是路由模型绑定不起作用 – GiuServ