3
$connection->createCommand()->batchInsert('user', ['name', 'age'], [
    [$names, $ages],
])->execute();

Yii 2 で上記のコードを使用してバッチ挿入を実行できることは知っています。しかし、batchInsert を使用してエントリの重複を防ぐにはどうすればよいでしょうか? たとえば、名前が重複している場合、データベースに挿入したくありません

4

1 に答える 1

0

2 つの可能なオプション:

1)nameデータベース テーブルの列に一意の制約を使用します。

そうすれば、クエリを実行して例外をキャッチするだけです。

try {
    // Your query goes here
} catch (\yii\db\Exception) {
    // Handle error
}

\yii\db\Exceptionは、より一般的なデータベース操作関連の例外です。より具体的な\yii\db\IntegrityExceptionを使用できます。

2)データをフィードしてクエリを実行する前に、PHP の配列から重複を除外します。配列の構築方法に応じて、次のことができます。

  • たとえば、この配列の構築中にforeach、同じ名前のアイテムが形成された配列に既に存在するかどうかを確認します。存在する場合は要素を追加し、そうでない場合はスキップします。
  • またはその後、たとえばarray_filter関数を使用します。

最初のアプローチをお勧めします。なぜなら、PHP で重複を処理することにしたとしても、データベースのデータ構造と追加の保護に応じて余分なものにならないからです。

于 2016-09-27T04:19:19.223 に答える