Domanda

Nella mia domanda ho un ciclo che viene eseguito circa 1000 volte, al suo interno Sto creando oggetti e salvandolo. Questa è la parte di applicazione in cui io popolo mio database con i dati. In comune appare simile a questo:

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

Questo produce 1.000 di query INSERT. E 'possibile, in qualche modo, ha fatto Kohana produrre multi-inserti. Dividere questo in 10 inserti con 100 insiemi di dati in ciascuna. E 'possibile e se sì che ciò che è il modo in cui farlo?

È stato utile?

Soluzione

Mentre la Kohana ORM non supporta il multi inserti, è comunque possibile utilizzare il generatore di query nel seguente modo:

$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();
}
  • avrai ancora bisogno di dividere i dati in modo quanto sopra non cercare di eseguire una query con 1000 inserti.
  • $ dati assume un array di array con i valori corrispondenti per l'ordine delle colonne

grazie Isaia in #kohana

Altri suggerimenti

php lavoro molto lento quando inserto a più serie molto grande (in modo che il metodo :: valori hanno array_merge) in modo più veloce:

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top