Laravel 访问器 $appends 忽略的问题

1.当我们使用getxxxxAttribute通过$appends追加xxxx属性时,可能会遇到这样的需要:通过模型某个属性$this->attributes['某个字段'],计算出 该xxxx属性。这样可能会报错。原因是在获取select时没有获取该字段(并不是每次都会使用该数据库字段),所以$this->attributes取不出该字段属性报错。所以一定要加判断:

if (!array_key_exists('某个字段', $this->attributes)) {
            return ' ';
        }else{
            //计算xxxx属性
        }
  1. 使用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 协议》,转载必须注明作者和本文链接
一切皆自学
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 6

访问器不是也是一样的道理,比如你隐藏了电话号码,但是你在有些页面需要完整的号码,这个时候就是很烦恼了,跟这个一样的。

4年前 评论

如果懒加载这个表的时候,你这个方法就不行了

4年前 评论

@全场我最姜姜姜丶 新问题, 有回答一下不?

我在模型里 写了一个 $appends = ['team']; 字段, 后面我 执行 php artisan db:seed 的时候 报错,

Laravel

报错说, 数据库没有找到 team 字段 , 我表里本来就没有这个字段 , 所以报错, 有什么办法解决?

4年前 评论

@全场我最姜姜姜丶
@Summer 新问题, 有回答一下不?

我在模型里 写了一个 $appends = ['team']; 字段, 后面我 执行 php artisan db:seed 的时候 报错,

Laravel

报错说, 数据库没有找到 team 字段 , 我表里本来就没有这个字段 , 所以报错, 有什么办法解决?

4年前 评论

直接置空 可以的

        $employees = Employee::orgs([$data['orgId']])->get()->each->setAppends([]);
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!