如何动态修改模型的 $appends 属性?

有个需求需要动态为Eloquent模型添加$appends属性
Illuminate\Database\Eloquent\Concerns\HasAttributes中发现有两个方法append()setAppends()
使用后模型及Builder $query内的$appends属性当时是发生了变化,但是当调用get()获取模型实例时就恢复原来的$appends了。
看代码,是get()时重新生成了新的模型实例,求问如何实现(同时需求无法在boot()中修改)

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
TimJuly
最佳答案

有一点不理解,为啥要动态添加 $appends?

6年前 评论
heheyan11 4年前
讨论数量: 5

目前解决方法是在自己的模型类里重定义了Eloquent\Model的newInstance()方法

    public function newInstance($attributes = [], $exists = false)
    {
        // This method just provides a convenient way for us to generate fresh model
        // instances of this current model. It is particularly useful during the
        // hydration of new objects via the Eloquent query builder instances.
        $model = new static((array) $attributes);

        $model->exists = $exists;

        $model->setConnection(
            $this->getConnectionName()
        );

        //解决get获取模型实例时丢失动态添加的appends
        $model->append($this->getArrayableAppends());

        return $model;
    }

这样对框架有影响没有?有没有更好的解决方法?

6年前 评论
TimJuly

有一点不理解,为啥要动态添加 $appends?

6年前 评论
heheyan11 4年前

@TimJuly 后来也发现这个想法很可笑了,直接在访问器里判断是否返回有效值更直接

6年前 评论
playmaker 1年前

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