Laravel5.1 修改器的疑惑

问下model的修改器触发的前提是什么?我发现如果提交的表单里没有这个字段不会触发修改器,还有新增数据时会触发,修改数据时就不会触发了,怎么让修改数据时也触发修改器呢?

model里定义了修改器

    /**
    * 将提交的权限数组转为字符串
    * @param $value
    * @return string
    */
    public function setPermissionsAttribute($value){
        $this->attributes['permissions'] = implode(',', $value);
    }

添加、更新操作如下:

    /**
     * 添加模型
     * @param array $data
     * @return mixed
     */
    public function create(array $data)
    {
            $result = $this->model->create($data);
            return $result ?
                    Common::returnCode(Code::createSuccess, ['url'=>$this->returnUrl]) :
                    Common::returnCode(Code::createFailed);
    }

    /**
     * 更新模型
     * @param array  $data
     * @param        $item
     * @param string $attribute
     * @return mixed
     */
    public function update(array $data, $item, $attribute = 'id')
    {
            $result = $this->model->where($attribute, $item)->update($data);
            return $result ?
                    Common::returnCode(Code::updateSuccess, ['url'=>$this->returnUrl]) :
                    Common::returnCode(Code::updateFailed);
    }

现在是create方法会触发修改器,而update方法不会触发修改器,这是什么问题?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3
lijinma

上一下你的代码,可能更容易让大家解答。

7年前 评论
     $result = $this->model->find($item);
     $result->permissions = $data['permissions'];
     $result->save();
     return $result ?
            Common::returnCode(Code::updateSuccess, ['url'=>$this->returnUrl]) :
            Common::returnCode(Code::updateFailed);

修改器对update,insert方法不直接起作用.

7年前 评论

@s4p3r 哦,原来如此,我现在是在外面手动把数据转换好,我这个是封装的统一的方法,不好直接指定字段

7年前 评论

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