$connection->createCommand()->batchInsert('user', ['name', 'age'], [
[$names, $ages],
])->execute();
Я знаю, что могу сделать пакетную вставку, используя код выше в Yii 2. Но как я могу предотвратить повторяющийся ввод, используя batchInsert? Например, если у меня есть повторяющееся имя, я не хочу вставлять его в БД
Два возможных варианта:
1) Использовать уникальное ограничение для name
столбец в вашей таблице базы данных.
Таким образом, вы просто пытаетесь выполнить запрос и поймать исключение:
try {
// Your query goes here
} catch (\yii\db\Exception) {
// Handle error
}
\ Юй \ дб \ Exception является более распространенным исключением операций, связанных с базой данных, вы можете использовать более конкретные \ Юй \ дб \ IntegrityException.
2) Исключить дубликаты из массива в PHP перед подачей данных и выполнением запроса. В зависимости от того, как построен массив, вы можете сделать это:
foreach
например, проверяя, существует ли уже элемент с таким именем в сформированном массиве, если да — добавить элемент к нему, иначе — пропустить. Я рекомендую первый подход, потому что даже если вы решите обрабатывать дубликаты в PHP, структура данных и дополнительная защита в базе данных не будут лишними.
Других решений пока нет …