Mehreinsatz in kohana orm3
-
25-09-2019 - |
Frage
In meiner Anwendung habe ich eine Schleife, die ausgeführt wird etwa das 1000-fache, im Inneren i Objekt bin zu schaffen und sie zu speichern. Dies ist der Teil der Anwendung, in der ich meine Datenbank zu füllen mit Daten. Gemeinsam das sieht wie folgt aus:
foreach(...){
...
try{
$object = new Model_Whatever;
$object->whatever=$whatever;
$object->save();}
catch(Exception $e){
...}
}
}
Dies erzeugt 1000 von INSERT-Abfragen. Ist es möglich, in irgendeiner Weise, Multi-Einsätze kohana produzieren gemacht. Split dies in 10 Einsätzen mit 100 Datensätzen in jedem. Ist es möglich, und wenn ja, was ist die Art und Weise tut so?
Lösung
Während die Kohana ORM nicht Multi-Einsätze unterstützt, können Sie immer noch den Query Builder wie folgt verwenden:
$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();
}
- Sie müssen noch die Daten aufzuteilen, so dass die oben nicht versuchen, eine Abfrage mit 1000 Einsätze auszuführen.
- $ Daten übernimmt ein Array von Arrays mit den Werten in der Reihenfolge der Spalten entsprechend
Dank Jesaja in #kohana
Andere Tipps
PHP arbeitet sehr langsam, wenn Einsatz Multi-Array sehr groß (so dass Methode :: Werte haben array_merge) so mehr schnell:
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);