繁体   English   中英

Laravel Eloquent:路由模型绑定不适用于多词表名

[英]Laravel Eloquent: route model binding not working with multi word table name

我正在使用 ajax 对模型的销毁路径进行删除调用。 一切正常,除了控制器与数据库中的相应记录不匹配。

我调用了api/serviceoperations/17 ajax delete调用,但是如果我以这种方式在我的控制器中放置一个var_dump

    public function destroy(ServiceOperation $serviceOperation) {
        var_dump($serviceOperation);die;
    }

我得到一个不存在的空模型

 public 'exists' => boolean false

当然,我有一个名为ServiceOperation模型,它引用表service_operations主键id ,在我的数据库中有一个键为17的记录。

为什么控制器不将我的 id 解析为数据库中相关记录的路由?


更新(已解决):

模型、控制器和迁移是使用命令创建的

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 }

解决方案是在控制器中使用全小写字符的输入变量名称。
在我的例子中,控制器中自动生成的销毁函数是

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

但是模型绑定不起作用。

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

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

问题出在路由文件中提供的Route::get('/serviceoperation/{wildcard}', 'PostsController@destroy'); {wildcard}必须在您的控制器中匹配

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

只要这个名称匹配,只要通配符是 id,模型绑定就会工作

你可以用这个东西解决它 -> 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);
}

试试这个:

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

    return $resource->delete();
}

看看,是否有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM