Pregunta

En mi aplicación tengo un bucle que se ejecuta alrededor de 1000 veces, dentro de lo que estoy creando objeto y guardarlo. Esta es la parte de la aplicación en la que i pueblan mi base de datos con los datos. Al igual que en esto se parece a esto:

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

Esto produce 1000 de consultas INSERT. ¿Es posible, de alguna manera, hizo kohana producir inserciones múltiples. Dividir esta en 10 insertos con 100 conjuntos de datos en cada uno. ¿Es posible y si es así que lo que es la forma de hacerlo?

¿Fue útil?

Solución

Mientras que el Kohana ORM no es compatible con múltiples inserciones, puede seguir utilizando el generador de consultas de la siguiente manera:

$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();
}
  • todavía se tendrá que dividir los datos por lo que lo anterior no trata de ejecutar una consulta con 1.000 inserciones.
  • $ de datos asume una matriz de matrices con los valores correspondientes a la orden de las columnas

Gracias Isaías en #kohana

Otros consejos

php trabajo muy lento cuando inserción de múltiples gama muy grande (por lo que el método :: valores tienen array_merge) de modo más 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top