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