2

在我的应用程序中,我有一个执行大约 1000 次的循环,在其中我正在创建对象并保存它。这是我用数据填充数据库的应用程序的一部分。通常,这看起来像这样:

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

这会产生 1000 个 INSERT 查询。是否有可能以某种方式让 kohana 生产多刀片。将其拆分为 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 中的以赛亚

于 2010-10-23T06:25:51.893 回答
0
call_user_func_array([$query, 'values'], $data);
于 2015-01-21T11:14:21.710 回答
0

当插入非常大的多数组时,php 工作非常慢(因此方法 ::values 具有 array_merge)所以更快:

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 回答