Laravel ID列访问器

3

我有一个带有列 ID 的表格。我想为该列创建一个访问器。

模型。

protected $table = 'repair_category';
protected $fillable = ['ID,','Name','Active','Background_Color','Icon_File_Name','ListOrder'];
protected $primaryKey = 'ID';

我尝试过

public function getIDAttribute($value)
{
    return Crypt::encrypt($value);
}

并且。
public function getIdAttribute($value)
{
    return Crypt::encrypt($value);
}

但是它没有起作用。

请有人建议一种解决此问题的方法。


那么你的主键是什么,如何在你的模型中定义它? - jakub wrona
我认为你的数据库存在设计问题:你的主键应该只是一个整数,并且是唯一的。加密内容可能会生成冲突(两个不同的元素生成相同的哈希值),因此这不是一个唯一的元素。为什么不能为加密内容创建另一列?还有,为什么需要加密ID? - Marc Brillault
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Jishad
那么,为什么不在另一列中生成加密内容,并在路由和控制器方法中使用该列,而不是使用主键? - Marc Brillault
我可以通过在返回视图之前处理数组并将ID加密来获得解决方案。但是,由于代码质量更高,我更喜欢使用Laravel Accessor方法。因此,我请求您为我的想法提供任何可能的方式。 - Jishad
1个回答

0

尝试在访问器方法中从 $this->attributes[] 读取

protected $primaryKey = 'ID';

public function getIDAttribute()
{
    return Crypt::encrypt($this->attributes['ID']);
}

你的答案无法正常工作,它返回的结果没有加密。 - Jishad
有点奇怪,因为它对我很好用 - 你能添加一段代码让你认为它不起作用吗?顺便说一下,我刚刚发现你的 'fillable' 中有一个错别字。实际上,如果是自动递增的话,就不应该有 "ID",但是它还带着一个尾随逗号。 - jakub wrona

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接