Ошибка привязки модели маршрута Laravel 5.2, приводящая к ошибке неизвестного столбца SQL

Я пытаюсь реализовать этот пакет https://github.com/vinkla/hashids чтобы скрыть все идентификаторы в URL.

Я создал новую установку laravel 5.2 и создал одну модель под названием Orange.php с заполненной таблицей.

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

Я добавил следующее в rout.php-

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

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

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

Я также переопределил getRouteKey, добавив следующую функцию в Orange.php-

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

Таким образом, getRouteKey должен кодировать идентификатор для отображения URL-адреса, например, 3 переходит к hgfdh, тогда моя привязка маршрута должна применяться сама по себе с помощью подстановочного знака ‘id’ к любому маршруту, используя параметр id для декодирования идентификатора для OrangeController.php в этом случае.

Я получил следующие две ошибки при попытке загрузить HTTP: // локальный: 8000 / оранжевый / 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 вместо $ id для Orange? Если да, то как я могу привязать $ id?

если я закомментирую определение Route :: model, я получу

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

2

Решение

Ларавелла имеет «Маршрут-модель» механизм связывания. Таким образом, в вашем маршруте вы можете ожидать запутанный идентификатор, но в bind метод, вы должны получить правильный model например, вот так:

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

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

Вот хороший пример это может помочь.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]