2

私のアプリケーションでは、約1000回実行されるループがあり、その中にオブジェクトを作成して保存しています。これは、データベースにデータを入力するアプリケーションの一部です。一般的に、これは次のようになります。

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

これにより、1000個のINSERTクエリが生成されます。どういうわけか、コハナにマルチインサートを生産させることは可能ですか?これを10個の挿入に分割し、それぞれに100個のデータセットを含めます。それは可能ですか?もしそうなら、そうする方法は何ですか?

4

3 に答える 3

11

Kohana ORMは複数の挿入をサポートしていませんが、クエリビルダーは次のように使用できます。

$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();
}
  • 上記で1000回の挿入でクエリを実行しようとしないように、データを分割する必要があります。
  • $ dataは、列の順序に対応する値を持つ配列の配列を想定しています

#kohanaのIsaiahに感謝します

于 2010-10-23T06:25:51.893 に答える
0

マルチ配列を非常に大きく挿入すると(メソッド:: valuesにarray_mergeが含まれるように)、phpの動作が非常に遅くなります。

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();
    }
}
于 2014-07-11T11:56:04.627 に答える
0
call_user_func_array([$query, 'values'], $data);
于 2015-01-21T11:14:21.710 に答える