Вопрос

В моем приложении у меня есть цикл, который выполняет около 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top