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

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

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

3

Решение

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

1) Использовать уникальное ограничение для name столбец в вашей таблице базы данных.

Таким образом, вы просто пытаетесь выполнить запрос и поймать исключение:

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

\ Юй \ дб \ Exception является более распространенным исключением операций, связанных с базой данных, вы можете использовать более конкретные \ Юй \ дб \ IntegrityException.

2) Исключить дубликаты из массива в PHP перед подачей данных и выполнением запроса. В зависимости от того, как построен массив, вы можете сделать это:

  • во время построения этого массива в foreach например, проверяя, существует ли уже элемент с таким именем в сформированном массиве, если да — добавить элемент к нему, иначе — пропустить.
  • или после использования, например, array_filter функция.

Я рекомендую первый подход, потому что даже если вы решите обрабатывать дубликаты в PHP, структура данных и дополнительная защита в базе данных не будут лишними.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]