Batch Insert отловить ошибки
-
- Сообщения: 203
- Зарегистрирован: 2014.02.16, 03:09
Batch Insert отловить ошибки
Здравствуйте,
Делаю некий импорт многих строк.
Вставляю их в базу с помощью batchInsert.
Если в какой то из строк ошибка (например duplicate уникального поля) то получается fatal error и не вставляются все строки вообще.
Можно ли как-то сделать так, чтобы все безошибочные строки вставлялись, а те что вызывают ошибку откидывались?
Если да, то каким образом ?
Делаю некий импорт многих строк.
Вставляю их в базу с помощью batchInsert.
Если в какой то из строк ошибка (например duplicate уникального поля) то получается fatal error и не вставляются все строки вообще.
Можно ли как-то сделать так, чтобы все безошибочные строки вставлялись, а те что вызывают ошибку откидывались?
Если да, то каким образом ?
Re: Batch Insert отловить ошибки
Либо, если MySQL, то гуглить по фразе ON DUPLICATE KEY
-
- Сообщения: 203
- Зарегистрирован: 2014.02.16, 03:09
Re: Batch Insert отловить ошибки
foreach это получается по одной вставлять?
Re: Batch Insert отловить ошибки
Да, что-то я подзабыл. Почему-то думалось что ON DUPLICATE KEY может быть либо UPDATE либо IGNORE, а оказывается только UPDATE.
Anyway, гуглить надо по обеим фразам. А если точнее, то по слову INSERT
-
- Сообщения: 203
- Зарегистрирован: 2014.02.16, 03:09
Re: Batch Insert отловить ошибки
Мне не надо именно duplicate, ошибки в заполнении могут быть любыми (например строка в числовое поле, дата не в том формате и т.д.)
Переписал на active record поочередное создание модели и save() с валидацией, теперь на половине файла вылетает с нехваткой памяти =\
Это ожидаемо или я что-то упускаю? Файл excel на ~6000 строк и на ~20 столбцов (20 полей в модели)
Можно как-то разбить группами например по 500 строк, очищать память, опять 500 и т.д. до завершения?
Переписал на active record поочередное создание модели и save() с валидацией, теперь на половине файла вылетает с нехваткой памяти =\
Это ожидаемо или я что-то упускаю? Файл excel на ~6000 строк и на ~20 столбцов (20 полей в модели)
Можно как-то разбить группами например по 500 строк, очищать память, опять 500 и т.д. до завершения?
Re: Batch Insert отловить ошибки
Я бы костыль быстрый написал :
Идея такая - считывать xls как csv построчно в цикле (все поля в массив), загонять данные в одну модель (setAttributes), валидировать и проверять ошибки, по ходу формировать массив для batchInsert, по достижении 500 записей сливать в таблицу ... Как-то так
Идея такая - считывать xls как csv построчно в цикле (все поля в массив), загонять данные в одну модель (setAttributes), валидировать и проверять ошибки, по ходу формировать массив для batchInsert, по достижении 500 записей сливать в таблицу ... Как-то так
Re: Batch Insert отловить ошибки
А есть возможность работать в Yii2 со множественной вставкой в таблицу БД через active record, чтобы не создавать в цикле 100500 моделей?
Re: Batch Insert отловить ошибки
Я же выше описал вариант. Создаешь одну модель, назначаешь ей атрибуты через setAttributes, потом валидируешь, потом назначаешь ей атрибуты через setAttributes, потом валидируешь .... 100500 раз