Question

Dans ma demande j'ai une boucle qui exécute environ 1000 fois, à l'intérieur je crée l'objet et l'enregistrer. Ceci est la partie d'application où je remplir ma base de données avec des données. En commun, cela ressemble à ceci:

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

Ce produit 1000 des requêtes INSERT. Est-il possible, d'une certaine façon, kohana fait produire des inserts multiples. Découpé dans 10 inserts avec 100 ensembles de données dans chacun. Est-il possible et si oui que c'est la façon de le faire?

Était-ce utile?

La solution

Alors que le Kohana ORM ne supporte pas les insertions multiples, vous pouvez toujours utiliser le générateur de requête comme suit:

$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();
}
  • vous aurez toujours besoin de partager les données de façon à ce qui précède ne pas essayer d'exécuter une requête avec 1000 insertions.
  • $ data suppose un tableau de tableaux avec les valeurs correspondant à l'ordre des colonnes

merci Isaïe dans #kohana

Autres conseils

travail php très lent quand insert tableau multi très grande (de sorte que la méthode :: valeurs ont array_merge) donc plus rapide:

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top