Laravel 将所有 get 的主键替换为 hashids

Laravel replace primary key with hashids for all get

我正在使用 laravel 4.2,我想在 url 中使用 hashids 而不是主键。它易于使用单个记录。如果我使用预先加载,我需要遍历所有模型并用哈希 ID 替换主键。

例如。 对于每个 post,我都需要用 hashid 更改 post_id。 对于 post 的每条评论,我都必须这样做。 对于评论的每个用户等等.. 我可以默认将模型扩展到 return hashid 吗?

您可以使用 Route::bind 方法来指定应如何准确地从 URL 段解析模型,如下所示。

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

现在 Laravel 知道如何解析 Eloquent 模型,如果你使用这样的路由

/admin/{post}/edit

是的,您可以使用 mutators 扩展您的模型。将此方法放入您的模型中,或者更好地放入您的所有模型都应该扩展的基础模型中。

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

之后你会在模型上获得 hashid 属性,例如 $post->hashid$comment->hashid