在我的应用程序中,我有一个执行大约 1000 次的循环,在其中我创建对象并保存它。这是应用程序的一部分,我用数据填充数据库。一般来说,这看起来像这样:
foreach(...){
...
try{
$object = new Model_Whatever;
$object->whatever=$whatever;
$object->save();}
catch(Exception $e){
...}
}
}
这会产生 1000 个 INSERT 查询。是否有可能以某种方式使 kohana 生产多刀片。将其分成 10 个插入,每个插入包含 100 个数据集。是否可能,如果可以的话,该怎么做?
虽然 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();
}
感谢 #kohana 中的以赛亚
当插入非常大的多个数组时,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();
}
}
call_user_func_array([$query, 'values'], $data);