PL *_*det 11 php mysql laravel eloquent
我从另一个服务获取JSON,并希望在表中插入一堆数据.我想这样做,每次运行它都不会崩溃.我想保持我对表的PK的唯一约束,(因为我不想两次插入相同的数据)但是,如果发生的话,我不希望laravel抛出致命的错误(仅在特定的表上) ).
如何插入我的数据,如果我尝试插入具有重复主键的其他数据,则继续插入?
Schema::create('dummy', function (Blueprint $table) {
$table->integer('id')->unique();
$table->string('name',100);
});
Run Code Online (Sandbox Code Playgroud)
从另一个API获取一堆JSON.然后插入所有行:
{
'id':1,
'name': 'one'
},{
'id':2
'name':'two'
}
Run Code Online (Sandbox Code Playgroud)
这使得.
DB::table('dummy')->insert([
['id' => 1, 'name' => 'one'],
['id' => 2, 'name' => 'two']
]);
Run Code Online (Sandbox Code Playgroud)
然后是另一天,第三方API上有新数据.并想要更新我的数据库:
获取json,并收到:
{
'id':1,
'name': 'one'
},{
'id':2
'name':'two'
},{
'id':3
'name':'three'
}
Run Code Online (Sandbox Code Playgroud)
这使得:
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.
]);
Run Code Online (Sandbox Code Playgroud)
Jar*_*ham 19
Laravel 的 Query Builder 现在有insertOrIgnorev5.8.33 及更高版本:
<?php
DB::table('users')->insertOrIgnore([
['id' => 1, 'email' => 'taylor@example.com'],
['id' => 2, 'email' => 'dayle@example.com']
]);
Run Code Online (Sandbox Code Playgroud)
在此处阅读更多信息:https : //laravel.com/docs/5.8/queries#inserts
您可以尝试捕获 PDO 异常
try
{
// inserting in DB;
}
catch(\Illuminate\Database\QueryException $e){
// do what you want here with $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
或者,但不确定,您可以尝试使用数据库事务:
public function insertInDB()
{
DB::transaction(function () {
DB::table(...);
// if everything is fine, it will commit, else, it will rollback
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8375 次 |
| 最近记录: |