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

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

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

4

Решение

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

public function getHashidAttribute()
{
return your_hash_function($this->attributes['id']);
}

После этого вы получите hashid атрибут на ваших моделях, как так $post->hashid, $comment->hashid и т.п.

1

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

Вы можете использовать метод Route :: bind, чтобы указать, как именно следует разрешать модели из сегментов URL, как показано ниже.

Route::bind('post', function($value)
{
return Post::where('hashid', $value)->first();
});

Теперь Laravel знает, как разрешить Eloquent Model, если вы используете такой маршрут

/admin/{post}/edit
1

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