带主键 insert into 批量操作,框架运行报错,但 sql 没错,如何解决?(Laravel 5.5)

在数据库中可能存在数据的情况下,获取原有数据,再计算出更新数据和新生数据。对原有数据进行更新,对新生数据进行添加,将更新和插入操作合为同一批量操作。代码片段如下:
file
生成批量插入或更新 sql 的方法:
file
运行报错,但是 sql 语句是没有错误的,运行结果如下:
file

QueryException {#1180
  #sql: "insert into `house_manage_fee` (`id`,`house_id`,`manage_at`,`manage_fee`,`created_at`,`updated_at`) values ('','2','2018-01','100.00','2018-03-23 12:05:48','2018-03-23 12:05:48'),('','2','2018-02','100.00','2018-03-23 12:05:48','2018-03-23 12:05:48'),('','2','2018-03','100.00','2018-03-23 12:05:48','2018-03-23 12:05:48'),('','3','2018-03','10.00','2018-03-23 12:05:48','2018-03-23 12:05:48') on duplicate key update  `created_at` = values(`created_at`) , `house_id` = values(`house_id`) , `id` = values(`id`) , `manage_at` = values(`manage_at`) , `manage_fee` = values(`manage_fee`) , `updated_at` = values(`updated_at`) "
  #bindings: []
  #message: "SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id' at row 1 (SQL: insert into `house_manage_fee` (`id`,`house_id`,`manage_at`,`manage_fee`,`created_at`,`updated_at`) values ('','2','2018-01','100.00','2018-03-23 12:05:48','2018-03-23 12:05:48'),('','2','2018-02','100.00','2018-03-23 12:05:48','2018-03-23 12:05:48'),('','2','2018-03','100.00','2018-03-23 12:05:48','2018-03-23 12:05:48'),('','3','2018-03','10.00','2018-03-23 12:05:48','2018-03-23 12:05:48') on duplicate key update  `created_at` = values(`created_at`) , `house_id` = values(`house_id`) , `id` = values(`id`) , `manage_at` = values(`manage_at`) , `manage_fee` = values(`manage_fee`) , `updated_at` = values(`updated_at`) )"
  #code: "HY000"
  #file: "D:\PHPWAMP\wwwroot\ts_rms\vendor\laravel\framework\src\Illuminate\Database\Connection.php"
  #line: 664
  -previous: PDOException {#1184
    #message: "SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id' at row 1"
    #code: "HY000"
    #file: "D:\PHPWAMP\wwwroot\ts_rms\vendor\laravel\framework\src\Illuminate\Database\Connection.php"
    #line: 458
    +errorInfo: array:3 [
      0 => "HY000"
      1 => 1366
      2 => "Incorrect integer value: '' for column 'id' at row 1"
    ]

生成的 sql ( id 是主键,自增)【重点:这是可更新数据的 批量插入 sql 语句,不懂自行百度(on duplicate key update )】:

"insert into 
`house_manage_fee` 
(`id`,`house_id`,`manage_at`,`manage_fee`,`created_at`,`updated_at`) 
values 
('','2','2018-01','100.00','2018-03-23 09:33:56','2018-03-23 09:33:56')
,('','2','2018-02','100.00','2018-03-23 09:33:56','2018-03-23 09:33:56')
,('','2','2018-03','100.00','2018-03-23 09:33:56','2018-03-23 09:33:56')
,('','3','2018-03','10.00','2018-03-23 09:33:56','2018-03-23 09:33:56') 
on duplicate key update  
`created_at` = values(`created_at`) 
, `house_id` = values(`house_id`)
, `id` = values(`id`) 
, `manage_at` = values(`manage_at`) 
, `manage_fee` = values(`manage_fee`) 
, `updated_at` = values(`updated_at`) "

sql 放在 运行器中,却运行一切正常:
file
file

如何解决这个问题???
急!急!急!求大神帮助!!!!
(laravel 5.5)

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 8

保存提示,id不能为空,可以设为increment

6年前 评论

@sedgwickz
数据库里 id 就是设置的自增的

6年前 评论

插入时将id去除试试。不过奇怪,为啥不用eloquent

6年前 评论

@sedgwickz
这个方法是具有更新功能的。如果 ID 不存在,是插入数据,ID存在,则为更新数据。
而且这是一个批量操作,eloquent 没有相应的批量更新方法

6年前 评论

@shihui1991 有批量插入的方法哦。https://learnku.com/docs/laravel/5.6/queri... 看了你的代码,其实用eloquent可以省略太多

6年前 评论

@sedgwickz
亲,你能不能完整地看完再作回答?

6年前 评论

@shihui1991 抱歉,刚手机登录看的,你说的貌似是批量更新的方法?其实文档也是有的。不过确实没太看明白你要表达的问题。

6年前 评论

代码和错误信息使用文本吧,图片会压缩,完全看不清

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!