Я использую laravel 4.2, и я хочу использовать хеш-коды вместо первичного ключа в URL. Его легко использовать с одной записью. Если я использую готовую загрузку, мне нужно пройтись по всем моделям и заменить первичные ключи на хэш-идентификаторы.
Например.
Для каждого поста мне нужно поменять post_id на хэш.
Для каждого комментария поста я должен сделать то же самое.
Для каждого пользователя комментария и тд ..
Могу ли я расширить модель, чтобы она возвращала хэш по умолчанию?
Да, вы можете расширить свою модель мутаторов. Поместите этот метод в свои модели или, что еще лучше, в свою базовую модель, которую должны расширять все ваши модели.
public function getHashidAttribute()
{
return your_hash_function($this->attributes['id']);
}
После этого вы получите hashid
атрибут на ваших моделях, как так $post->hashid
, $comment->hashid
и т.п.
Вы можете использовать метод Route :: bind, чтобы указать, как именно следует разрешать модели из сегментов URL, как показано ниже.
Route::bind('post', function($value)
{
return Post::where('hashid', $value)->first();
});
Теперь Laravel знает, как разрешить Eloquent Model, если вы используете такой маршрут
/admin/{post}/edit