gpt4 book ai didi

php - 插入重复键时,laravel Eloquent 地忽略错误

转载 作者:可可西里 更新时间:2023-11-01 06:30:42 27 4
gpt4 key购买 nike

我正在从另一个服务中获取一个 JSON,并想在一个表中插入一堆数据。我想以一种每次运行它都不会崩溃的方式来做。我想对表的 PK 保留我的唯一约束,(因为我不想两次插入相同的数据)但是,我不希望 laravel 在发生时抛出 fatal error (仅在特定表上) ).

如果我尝试插入另一个具有重复主键的数据,我该如何插入我的数据并继续插入?

Schema::create('dummy', function (Blueprint $table) {
$table->integer('id')->unique();

$table->string('name',100);
});

从另一个 API 获取一堆 JSON。然后插入所有行:

{ 
'id':1,
'name': 'one'
},{
'id':2
'name':'two'
}

这使得。

DB::table('dummy')->insert([
['id' => 1, 'name' => 'one'],
['id' => 2, 'name' => 'two']
]);

然后改天,第 3 方 API 上有新数据。并想更新我的数据库:

获取json,并接收:

{ 
'id':1,
'name': 'one'
},{
'id':2
'name':'two'
},{
'id':3
'name':'three'
}

这使得:

DB::table('dummy')->insert([
['id' => 1, 'name' => 'one'], // <-- will crash there cause PK already existe, but want to keep inserting
['id' => 2, 'name' => 'two'], // <-- skipp cause already exist
['id' => 3, 'name' => 'three'] // insert that line.
]);

最佳答案

Laravel 的查询生成器现在在 v5.8.33 及更高版本中具有 insertOrIgnore:

<?php
DB::table('users')->insertOrIgnore([
['id' => 1, 'email' => 'taylor@example.com'],
['id' => 2, 'email' => 'dayle@example.com']
]);

在这里阅读更多:https://laravel.com/docs/5.8/queries#inserts


请注意,insertOrIgnore 将忽略重复记录,也可能忽略其他类型的错误,具体取决于数据库引擎。例如insertOrIgnore会绕过MySQL的严格模式。

关于php - 插入重复键时,laravel Eloquent 地忽略错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44013914/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com