You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中updateOrCreate结合increment()更新库存报错求助

问题原因

你遇到的错误核心是:执行updateOrCreate创建新记录时,只传入了marketing_id和product_id,但数据库的stock字段没有设置默认值,此时插入操作先于increment执行,导致数据库因为stock字段为空报错。

解决方案

这里提供三种可行的解决方式:

方式一:在updateOrCreate中初始化stock值

修改代码,在创建新记录时直接给stock设置初始值0,之后再执行增量操作:

\App\Models\MarketingStock::updateOrCreate(
    ['marketing_id' => $attr['marketing_id']],
    ['product_id' => $attr['product_id'], 'stock' => 0],
)->increment('stock', $attr['qty']);

方式二:修改数据库表结构,给stock设默认值

在对应的数据库迁移文件中,给stock字段添加默认值0:

$table->integer('stock')->default(0);

然后执行迁移命令更新表结构:

php artisan migrate

注意:如果是已存在的表,需要创建新的迁移文件来修改字段,不要直接修改旧迁移文件后执行migrate:refresh(会清空数据)。

方式三:用firstOrNew手动处理创建逻辑

先查询记录是否存在,不存在则手动初始化stock再保存,最后执行增量:

$marketingStock = \App\Models\MarketingStock::firstOrNew(
    ['marketing_id' => $attr['marketing_id']],
    ['product_id' => $attr['product_id']]
);

if (!$marketingStock->exists) {
    $marketingStock->stock = 0;
    $marketingStock->save();
}

$marketingStock->increment('stock', $attr['qty']);

内容的提问来源于stack exchange,提问作者owf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:05:29