【问题标题】:Laravel trying to save $appends attributesLaravel 试图保存 $appends 属性
【发布时间】:2021-09-05 04:05:12
【问题描述】:

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

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

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

型号

    /**
     * @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'

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

【问题讨论】:

  • 数据库列的名称是什么,您的错误发生在哪一行?
  • 您好! pluggable_data 没有对应的数据库列。它只是一个存储在模型中的临时字段,会被丢弃。我编辑了问题,准确显示了触发错误的位置。
  • 在这种情况下,我会在发送之前在客户端删除该字段,或者在调用update()之前在服务器端删除该字段
  • 我将编辑问题以使其更清楚,如果我没有说清楚,对不起
  • 尝试将$this-&gt;attributes['pluggable_data']替换为其他变量。例如:this._pluggable_data。在laravel中,属性可能需要保存到数据库

标签: php laravel serialization model laravel-6


【解决方案1】:

Ass @nay 在 cmets 中说,我所要做的就是将 $this-&gt;attributes['pluggable_data'] 替换为一个实变量,例如 $this-&gt;pluggable_data。这样,Laravel 就不会认为是数据库列了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    相关资源
    最近更新 更多