首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 8插销不像预期的那样工作

Laravel 8插销不像预期的那样工作
EN

Stack Overflow用户
提问于 2022-01-14 20:51:41
回答 1查看 2.9K关注 0票数 2

我正在尝试像这里(https://stackoverflow.com/a/66200086/1240380)和8.xdoc中解释的那样使用upsert,但是它并不像预期的那样工作。

代码语言:javascript
复制
CartItem::upsert(
    [
        [
            "id" => 105,
            "unit_price" => 146.5124,
            "price" => 293.0248,
            "unit_taxes" => 28.22,
            "taxes" => 56.44,
            "custom_fields" => '{"options":{"estado":15,"user_id":1},"calculated_price":146.5124,"calculated_tax_price":28.22}'
        ],
        [
            "id" => 106,
            "unit_price" => 113.8824,
            "price" => 227.7648,
            "unit_taxes" => 11.54,
            "taxes" => 23.08,
            "custom_fields" => '{"options":{"estado":15,"user_id":1},"calculated_price":"113.8824","calculated_tax_price":"11.539999999999999"}'
        ],
    ],
    'id'
);

上面的代码产生了以下错误

照明\数据库\QueryException SQLSTATEHY000:一般错误: 1364字段'cart_id‘没有默认值(created_at:insert insert cart_items (created_atcustom_fieldsidpricetaxesunit_priceunit_taxesupdated_at)值(2022-01-1420:41:44,{“选项”:{“estado”:15,"user_id":1},"calculated_price":146.5124,"calculated_tax_price":28.22},105,293.0248,56.44,146.5124,28.22,2022-01-14 20:41:44),(2022-01-14 20:41:44,{“选项”:{“estado”:15,"user_id":1},"calculated_price":"113.8824","calculated_tax_price":"11.539999999999999"},106,227.7648,23.08,113.8824,11.54,2022-01-14 20:41:44)对重复密钥更新的id =值(id),unit_price =值(unit_price),price =值(price),unit_taxes =值(unit_taxes),taxes =值(d21),custom_fields =值(custom_fields),updated_at =值(updated_at))

id列是表的PK。我也试过使用第三种方法,但没有成功。

我不明白它为什么不象预期的那样起作用。由于某些原因,行是存在的,但它们没有被检测到。该错误表明laravel正在尝试创建新行,而不是更新前一个行。

有什么东西不见了吗?

所涉各行:

表中的定义:

编辑1:关于列类型,price和unit_price都是int,但我尝试了unit_price,因为在CartItem中,我在$casts变量中配置了它们,将它们转换为"Money“类型(将它们保存为美分)。我尝试使用int值,但得到了相同的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-14 21:52:52

Laravel执行一个包含所有行的查询,同时使用upsert,其中包括MySQL中的重复键更新和冲突.请在Postgres中进行更新。此命令指示数据库在已经存在的情况下更新记录。您需要将cart_id传递给MySQL,尝试在获得重复错误之前执行插入操作。

https://laravelproject.com/laravel-upsert/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70716392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档