Многопровождение в Kohana ORM3
-
25-09-2019 - |
Вопрос
В моем приложении у меня есть цикл, который выполняет около 1000 раз, внутри этого я создаю объект и экономя. Это часть приложения, в которой я заполняю мою базу данных с данными. В общем, это выглядит так:
foreach(...){
...
try{
$object = new Model_Whatever;
$object->whatever=$whatever;
$object->save();}
catch(Exception $e){
...}
}
}
Это производит 1000 запросов вставки. Возможно ли, каким-то образом сделали Kohana производить мульти вкладыши. Разделите это на 10 вставок на 100 наборов данных в каждом. Это возможно, и если да, то, что такое путь так?
Решение
В то время как Kohana Orm не поддерживает Multi INSTERS, вы все равно можете использовать Suery Builder следующим образом:
$query = DB::insert('tablename', array('column1', 'column2','column3'));
foreach ($data as $d) {
$query->values($d);
}
try {
$result = $query->execute();
} catch ( Database_Exception $e ) {
echo $e->getMessage();
}
- Вам все равно нужно будет разделить данные вверх, чтобы приведенное выше не пытается выполнить запрос с 1000 вставками.
- $ данные предполагают массив массивов со значениями, соответствующими порядку столбцов
Спасибо Исаия в #kohana
Другие советы
PHP Работа очень медленно, когда вставить мультиметр очень большой (так, чтобы метод :: значения имеют array_merge) так же быстро:
class Database_Query_Builder_Bath_Insert
extends Database_Query_Builder_Insert{
public static function doExecute($table, $data) {
$insertQuery = DB::insert($table, array_keys(current($data)));
$insertQuery->_values = $data;
$insertQuery->execute();
}
}
call_user_func_array([$query, 'values'], $data);
Не связан с StackOverflow