在我的应用程序,我有一个循环,执行关于1000时,它里面我创造的对象和保存它。这是部分的应用程序,在那里我填充我的数据库与数据。在公共这看起来是这样的:

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

这产生1000插入查询。它是可能的,在某种程度上,由kohana产生多插入。分割成10插入的100套数据中的每一个。它是可能的,如果是的话,什么样的方式这样做?

有帮助吗?

解决方案

虽然Kohana奥姆不支持多插入,仍然可以使用的查询生成器如下:

$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插入。
  • $数据假定一系列的阵列的数值相对应的顺序列

谢谢以赛亚在#kohana

其他提示

PHP工作非常慢时插入多阵列非常大(使得方法::值具有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();
    }
}
call_user_func_array([$query, 'values'], $data);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top