Предотвратить дублирование batchInsert в yii2

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

Я знаю, что могу сделать пакетную вставку, используя код выше в Yii 2. Но как я могу предотвратить повторяющийся ввод с помощью batchInsert? Например, если у меня есть повторяющееся имя, я не хочу вставлять его в БД

1 ответ

Два возможных варианта:

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, структура данных и дополнительная защита в базе данных не будут лишними.

Другие вопросы по тегам