Laravel试图保存$appends属性



我正在编写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就不会认为这是一个数据库列

相关内容

  • 没有找到相关文章

最新更新