мульти вставка в кохане orm3 - PullRequest
       13

мульти вставка в кохане orm3

2 голосов
/ 23 октября 2010

В моем приложении у меня есть цикл, который выполняется около 1000 раз, внутри я создаю объект и сохраняю его. Это часть приложения, где я заполняю свою базу данных данными. В общем это выглядит так:

foreach(...){
    ...
    try{
        $object = new Model_Whatever;
        $object->whatever=$whatever;
        $object->save();}
    catch(Exception $e){
    ...}
}
                    }

Это производит 1000 запросов INSERT. Можно ли каким-то образом заставить кохану производить много вкладышей. Разделите это на 10 вставок по 100 наборов данных в каждом. Возможно ли это, и если да, то как это сделать?

Ответы [ 3 ]

11 голосов
/ 23 октября 2010

Хотя Kohana ORM не поддерживает множественные вставки, вы все равно можете использовать построитель запросов следующим образом:

$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 вставками.
  • $ data предполагает массив массивов со значениями, соответствующими порядку столбцов

спасибо Исаии в # кохане

0 голосов
/ 21 января 2015
call_user_func_array([$query, 'values'], $data);
0 голосов
/ 11 июля 2014

PHP работает очень медленно, когда вставка мультимассива очень велика (так что метод :: values ​​имеет 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();
    }
}
...