簡體   English   中英

Laravel 5.2路由模型綁定錯誤導致SQL未知列錯誤

[英]Laravel 5.2 route model binding error causing SQL unknown column error

我正在嘗試實現此程序包-https ://github.com/vinkla/hashids以混淆URL中的所有ID。

我創建了laravel 5.2的全新安裝,並創建了一個名為Orange.php的模型,並在其中填充了表格-

INSERT INTO `oranges` (`id`, `orange_name`) VALUES(1, 'test1'),(2, 'test2'),(3, 'test3');

我將以下內容添加到routes.php-

Route::bind('id', function ($id, $route) {
return Hashids::decode($id)[0];
});

Route::resource('orange', 'OrangeController');

Route::model('orange', 'App\Orange');

我還通過將以下功能添加到Orange.php-來覆蓋getRouteKey-

public function getRouteKey()
{
return Hashids::encode($this->getKey());
}

因此,getRouteKey應該對ID進行編碼以顯示URL,例如3轉到hgfdh,然后在這種情況下,我的路由綁定應該通過“ id”通配符將自身應用到使用id參數來解碼OrangeController.php的任何路由。

嘗試加載http:// localhost:8000 / orange / 3-時收到以下兩個錯誤

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'orange_name:"test3"' in 'where clause'

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'orange_name:"test3"' in 'where clause' (SQL: select count(*) as aggregate from `oranges` where `orange_name` = test3 and `orange_name:"test3"` <> {"id":3 and `created_at:"2016-06-23 09:30:39"` = updated_at:"2016-06-23 09:30:39"})

我認為此錯誤與-

 Route::model('orange', 'App\Orange');

是否要綁定Orange實例而不是Orange的$ id? 如果是這樣,如何綁定$ id?

如果我注釋掉Route :: model定義,我會得到-

NotFoundHttpException in Handler.php line 103:
No query results for model [App\Orange].

Laravel具有“路由模型”綁定機制。 因此,在您的路由中,您可能會期望獲得混淆的ID,但是在bind方法中,您應該獲得適當的model實例,如下所示:

Route::bind('orange', function($value)
{
    $id = Hashids::decode($value)[0];

    return Orange::findOrFail($id);
});

這是一個很好的示例 ,可能會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM