我只是编程的初学者
我想知道是否有人能解决我的问题(PostgreSQL& Yii2)
我有一个按钮来提交这些数组数据(本例中只有5行):
+----+--------+
| id | name |
+----+--------+
| 1 | apple |
| 2 | orange |
| 3 | manggo |
| 1 | fish |
| 4 | meat |
+----+--------+
每个步骤使用2个查询(SELECT COUNT& INSERT)
+----+--------+
| id | name |
+----+--------+
| 1 | apple |
| 2 | orange |
| 3 | manggo |
| 4 | fish |
| 5 | meat |
+----+--------+
对于第二种情况,毕竟继续(直到id = 5没有记录存在)提交数据库
谢谢
答案 0 :(得分:0)
确保id
列具有唯一约束,假设您的id列是它应该具有的主键。打开一个事务,然后只插入行,如果id
已经存在,则DB将抛出错误。如果抛出错误,请捕获它并执行回滚,否则提交事务。
示例:
$data = [
['id' => 1, 'name' => 'Item 1'],
['id' => 2, 'name' => 'Item 2'],
['id' => 3, 'name' => 'Item 3'],
['id' => 4, 'name' => 'Item 4'],
['id' => 5, 'name' => 'Item 5'],
];
$connection = Yii::$app->db;
$transaction = $connection->beginTransaction();
try {
foreach ($data as $item) {
$connection->createCommand()->insert('{{%your_table}}', $item)->execute();
}
$transaction->commit();
} catch (\yii\db\IntegrityException $exception) {
$transaction->rollBack();
}
我不知道您自己插入ID值有多重要,但您可能最好使用id列的序列号。