Laravel 正在尝试保存 $appends 属性

Laravel trying to save $appends attributes

我在 Laravel 6 上编码,偶然发现了这个问题。在某些情况下,我的模型中需要一个字段 accessors,但 它在我的数据库中不存在 。正如我在文档中所读,变量 $appends 使相关字段与模型一起序列化,但未保存在数据库中。

然后,当我在数据库中更新或保存特定模型的条目 时,Laravel 返回一个错误提示field x is not present in field list。我在这里搜索,用谷歌搜索了很多,但没有找到任何答案。

这个pluggable_data字段不是客户端发送的。我在服务器端创建它,因为我需要它的信息来完成一些任务。但是在数据库中创建一个列来存储它是不够相关的。

型号

    /**
     * @var array|null
     */
    protected $appends = [
        'pluggable_data'
    ];

    /**
     * @param array $pluggableData
     */
    public function setPluggableDataAttribute(array $pluggableData)
    {
        $this->attributes['pluggable_data'] = $pluggableData;
    }

    /**
     * @return array
     */
    public function getPluggableDataAttribute(): array
    {
        return $this->attributes['pluggable_data'] ?? []; //  Sometimes there is no pluggable data, then i return an empty array
    }

错误发生的地方

    $activity->setRegisterDate($fields['register_date']);
    $activity->setExtraAttribute($fields['extra']);
    $activity->update(); <----- Here

    return $activity;

错误: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'pluggable_data' in 'field list'

总结我想要的(以防你有更好的主意):我想要一个将出现在模型序列化中的字段,即使它是一个空数组,但不会保存在数据库中。

正如@nay 在评论中所说,我所要做的就是用一个真正的变量替换 $this->attributes['pluggable_data'],比如 $this->pluggable_data。这样,Laravel就不会认为是数据库列了