我在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'
总结我想要的内容(万一您有更好的想法):我想要一个将出现在模型序列化中的字段,即使它是一个空数组,但它不会保存在数据库中。
发布于 2021-07-07 20:05:41
正如@nay在评论中所说的那样,我所要做的就是用一个真正的变量替换$this->attributes['pluggable_data'],比如$this->pluggable_data。这样,Laravel就不会认为它是一个数据库列。
https://stackoverflow.com/questions/68068687
复制相似问题