首页 > 解决方案 > Laravel InsertOrIgnore - 插入了哪些记录?

问题描述

在 Laravel InsertOrIgnore 调用中,或者更广泛地说,原始 MySQL Insert 或 Ignore 调用中,有没有办法在调用后判断哪些插入的记录成功,哪些插入失败?

例如,以这个查询为例,该查询被插入到表“trackings”中,该表具有 user_id 和 project_id 作为组合主键。假设我们已经在 db 中有值:
user_id: 1001, project_id:99
user_id: 1233, project_id:99
所以下面代码中的前两个插入将被忽略

insert ignore into `trackings` 
(`user_id`, `project_id`, `dollarvalue`, `dateAdded`,  `flags`) values 
(1001, 99, '3.00', '2021-03-27 03:19:10', 'e'), /* DUPE */
(1233, 99, '3.00', '2021-03-27 03:19:10', 'e'), /* DUPE */
(192, 97, '2.50', '2021-03-27 03:19:10', 'e'), 
(9984, 99,* '3.00', '2021-03-27 03:19:10', 'e'), 
(9, 99, '3.00', '2021-03-27 03:19:10', 'e')

有没有办法获取已插入或相反未插入的记录列表?需要明确的是,我寻找的不仅仅是一个 COUNT,我需要知道插入的记录和被忽略的记录的标识符(即上面示例中的 user_id 和 project_id)。我还希望能够执行“批量InsertIgnore” - 即一次 InsertIgnoring SEVERAL 行,而不是一次循环并检查结果 1 行,这对我的用例来说是不可行的(我们要插入数千行一次)

标签: mysqllaravel

解决方案


推荐阅读