有些字段的特殊处理-使用修改器与访问器-比如银行卡信息
学习链接
DB查询
略,太简单了。没难度
ORM
访问器
数据库返回的部分字段我需要进行特殊处理怎么办?
访问器用于从数据库获取对应字段值后进行一定处理满足指定需求再返回给调用方。
们可以在 User
模型类中添加相应的方法 getDisplayNameAttribute
(注意这里的转化方式,将小写字母+短划线格式属性转化为驼峰格式方法,后面的修改器也是这样):
public function getDisplayNameAttribute()
{
return $this->nickname ? $this->nickname : $this->name;
}
这样,我们就可以在代码中直接通过 $user->display_name
访问期望的用户名了
访问器方法名中包含的字段尽量不要和数据库字段名同名,否则会覆盖数据库字段
修改器
使用修改器
修改器用于在字段值保存到数据库之前进行一定处理满足需求后再存到数据库。
访问器,与 修改器的例子。
场景
在保存用户银行卡号的时候需要加密后才能保存,显示时需要对银行卡号进行脱敏处理。
解决方案
比如说,user 模型 有 一个 card_no 字段
定义一个加密银行卡号的修改器,去掉所有空格,这个操作仅仅是一个例子
public function setCardNoAttribute($value)
{
$value = str_replace(' ', '', $value); // 将所有空格去掉
$this->attributes['card_no'] = encrypt($value);
}
接下来我们需要定义访问器,来加密这个字段。
则代码如下:
public function getCardNumAttribute()
{
if (!$this->card_no) {
return '';
}
$cardNo = decrypt($this->card_no);
$lastFour = mb_substr($cardNo, -4);
return '**** **** **** ' . $lastFour;
}