Laravel заменил первичный ключ хешами для всех

Я использую laravel 4.2, и я хочу использовать хеш-коды вместо первичного ключа в URL. Его легко использовать с одной записью. Если я использую готовую загрузку, мне нужно пройтись по всем моделям и заменить первичные ключи на хэш-идентификаторы.

Например. Для каждого поста мне нужно поменять post_id на хэш. Для каждого комментария поста я должен сделать то же самое. Для каждого пользователя комментария и т. Д. Могу ли я расширить модель, чтобы она возвращала хэш по умолчанию?

2 ответа

Решение

Да, вы можете расширить свою модель с помощью мутаторов. Поместите этот метод в свои модели или, что еще лучше, в свою базовую модель, которую должны расширять все ваши модели.

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
Другие вопросы по тегам