Laravel 访问器 $appends 忽略的问题
1.当我们使用getxxxxAttribute通过$appends追加xxxx属性时,可能会遇到这样的需要:通过模型某个属性$this->attributes['某个字段'],计算出 该xxxx属性。这样可能会报错。原因是在获取select时没有获取该字段(并不是每次都会使用该数据库字段),所以$this->attributes取不出该字段属性报错。所以一定要加判断:
if (!array_key_exists('某个字段', $this->attributes)) {
return ' ';
}else{
//计算xxxx属性
}
- 使用getxxxxAttribute通过$appends追加xxxx属性时,也可能会遇到这样的需要:通过查询数据库,计算获取改xxxx属性。这样做的坑就是,无论你是否用到该xxxx属性,都会去查询数据库,这无疑在暗中损耗性能(别人的坑,别人用到就追加该属性,才不管你用不用)。通过网上查找我的解决:
//在模型中加一个静态变量用于判断 public static $withoutAppends = false;//默认要$appends追加属性 //getxxxxAttribute方法加个判断 public function gexxxxAttribute(){ if(self::$withoutAppends){ return ' '; } //查数据库 }//在控制器或者其他构造函数中注入使用该模型时,就可以控制是否追加该xxxx属性。 public function __construct(Model $model) { $model::$withoutAppends = true;//不要$appends追加属性 }3.$model->setAppends([]);好像也可以。但我laravel5.4试了下,发现没效果。with(模型)也不知道效果什么样。估计那里不对。
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
访问器不是也是一样的道理,比如你隐藏了电话号码,但是你在有些页面需要完整的号码,这个时候就是很烦恼了,跟这个一样的。
如果懒加载这个表的时候,你这个方法就不行了
@全场我最姜姜姜丶 新问题, 有回答一下不?
我在模型里 写了一个 $appends = ['team']; 字段, 后面我 执行 php artisan db:seed 的时候 报错,
报错说, 数据库没有找到 team 字段 , 我表里本来就没有这个字段 , 所以报错, 有什么办法解决?
@全场我最姜姜姜丶
@Summer 新问题, 有回答一下不?
我在模型里 写了一个 $appends = ['team']; 字段, 后面我 执行 php artisan db:seed 的时候 报错,
报错说, 数据库没有找到 team 字段 , 我表里本来就没有这个字段 , 所以报错, 有什么办法解决?
直接置空 可以的