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?

War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top