【发布时间】:2017-10-04 22:12:32
【问题描述】:
创建用户时,例如在控制器中使用以下行:
$user = $this->create($request->all());
这将插入带有表单值(姓名、电子邮件、密码等)的用户记录。
但是如果我们想在模型和数据库表上设置一个“隐藏”的用户字段/列,例如一个特殊的唯一生成令牌(user.token),我们不想在每个控制器中都这样做。
如果 laravel 有服务层,可以在这里完成,但最好在模型本身中完成。
例如通过捕获 beforeSave 回调,并让一些代码生成令牌并在将其写入数据库之前设置相应的字段。我看到模型已经保存()事件/观察者,但这看起来像是在保存之后发生的,我不想把这个逻辑放在外部类中,它属于模型,文档没有说观察者可以修改模型(在这种情况下通过设置列)
有什么建议吗?
【问题讨论】:
-
您的意思是为始终设置的列实现设置器,例如名称,并在其中输入代码以设置其他列,例如令牌?它有点破解,但可能会工作......
-
另外值得注意的是,一个属性被隐藏了,并不意味着它不能被填充。只需将其添加到您的
fillable数组中,和/或将其从您的guarded数组中删除即可。
标签: laravel