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

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

ответ

0

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

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