Pergunta

No meu aplicativo, tenho um loop que executa cerca de 1000 vezes, dentro dele, estou criando objeto e salvando -o. Esta é a parte do aplicativo em que povoado meu banco de dados com dados. Em comum, isso se parece com o seguinte:

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

Isso produz 1000 de consultas de inserção. É possível, de alguma forma, fazer Kohana produzir inserções múltiplas. Divida isso em 10 inserções com 100 conjuntos de dados em cada um. É possível e, se sim, o que é o caminho?

Foi útil?

Solução

Enquanto o Kohana ORM não suporta inserções múltiplas, você ainda pode usar o Consultor de consultas da seguinte maneira:

$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();
}
  • Você ainda precisará dividir os dados para que o acima não tente executar uma consulta com 1000 inserções.
  • $ data assume uma matriz de matrizes com os valores correspondentes à ordem das colunas

Obrigado Isaiah em #kohana

Outras dicas

O PHP funciona muito lento ao inserir uma matriz multi muito grande (para que o método :: os valores tenham Array_Merge) tão mais rápido:

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top