kohana orm3 中的多重插入

问题描述 投票:0回答:3

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

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

这会产生 1000 个 INSERT 查询。是否有可能以某种方式使 kohana 生产多刀片。将其分成 10 个插入,每个插入包含 100 个数据集。是否可能,如果可以的话,该怎么做?

php kohana kohana-3 kohana-orm
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 中的以赛亚


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();
    }
}

0
投票
call_user_func_array([$query, 'values'], $data);
© www.soinside.com 2019 - 2024. All rights reserved.