使用Hashids库来散列Laravel eloquent集合上的id

Mik*_*ick 3 php laravel laravel-5 hashids

我正在从一个数据库中获取一组任务作为一个雄辩的集合,然后我将该集合发送到我的视图,我在那里做了一个foreach.这里没问题.除此之外,我需要id在我的视图中引用任务(网址操作等).但我显然不希望这个在源代码中,所以我使用这个来散列id.但在视图中这样做似乎是错误的.

有没有办法在模型或控制器中散列id?

这是我在控制器中调用集合的方式:

$tasks = Auth::user()->tasks()->orderBy('created_at', 'desc')->get();
Run Code Online (Sandbox Code Playgroud)

这就是我目前在我的视图中对id进行哈希的方法:

<a href="{{ route('tasks.markascompleted', Hashids::encode($task->id)) }}">
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

Stu*_*ner 6

您可以使用访问器方法来完成它.首先,在Task模型的顶部附加一个新属性:

protected $appends = ['hashid'];
Run Code Online (Sandbox Code Playgroud)

然后,在同一模型中,创建一个填充属性的访问器:

public function getHashidAttribute()
{
    return Hashids::encode($this->attributes['id']);
}
Run Code Online (Sandbox Code Playgroud)

完成后,只需在视图中调用附加属性:

<a href="{{ route('tasks.markascompleted', $task->hashid) }}">
Run Code Online (Sandbox Code Playgroud)