Laravel跨表插入报列不存在错误 自动忽略多余字段方案
解答
将insert()方法替换为create()方法即可解决该问题。使用create方法时,模型只会插入$fillable属性中定义的字段值,会自动过滤所有非目标表的多余字段,不需要手动逐个剔除临时表独有字段。
原始问题
需求为审批通过后将临时表的数据迁移至主表。
主表中不存在status、cancelled、cancelled_by字段,这些字段仅存在于临时表中,尝试将临时表全量字段插入主表时,系统抛出错误。
最初实现数据迁移的代码如下:
public function approve(mpd_temp $mpd) { $result = mpd::insert($mpd->toArray()); if ($result) { mpd_temp::where('sno', $mpd->sno)->delete(); toast('MPD Successfully Approved', 'success'); } }
曾尝试手动移除多余字段,代码如下:
$mpd->forget('status'); $mpd->forget('cancelled_at'); $mpd->forget('cancelledby');
但操作后依然报错,寻求可实现「临时表指定字段迁移至主表、插入成功后删除临时表对应数据」需求的最佳实践。
内容的提问来源于stack exchange,提问作者Lokesh M
相关产品推荐
相关产品推荐

