簡體   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