insert dans plusieurs kohana orm3
-
25-09-2019 - |
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?
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);