gpt4 book ai didi

php - Laravel 5.2路由模型绑定(bind)错误导致SQL未知列错误

转载 作者:行者123 更新时间:2023-11-29 03:24:58 25 4
gpt4 key购买 nike

我正在尝试实现这个包- 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,然后我的路由绑定(bind)应该通过“id”通配符将自身应用到任何使用 id 参数的路由,在这种情况下解码 OrangeController.php 的 ID .

我在尝试加载 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');

它是否试图绑定(bind) Orange 的实例而不是 Orange 的 $id?如果可以,我该如何绑定(bind) $id?

如果我注释掉我得到的 Route::model 定义-

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

最佳答案

Laravel 有 "route-model"绑定(bind)机制。所以在你的 route 你可能会期待一个混淆的 id,但是在 bind 方法中你应该得到一个正确的 model 实例,就像这样:

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

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

这是一个不错的 example这可能会有所帮助。

关于php - Laravel 5.2路由模型绑定(bind)错误导致SQL未知列错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37996176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com