kohana orm3中的多插入
Posted
技术标签:
【中文标题】kohana orm3中的多插入【英文标题】:multi insert in kohana orm3 【发布时间】:2011-04-29 11:57:29 【问题描述】:在我的应用程序中,我有一个执行大约 1000 次的循环,在其中我正在创建对象并保存它。这是我用数据填充数据库的应用程序的一部分。通常这看起来像这样:
foreach(...)
...
try
$object = new Model_Whatever;
$object->whatever=$whatever;
$object->save();
catch(Exception $e)
...
这会产生 1000 个 INSERT 查询。是否有可能以某种方式让 kohana 生产多刀片。将其拆分为 10 个插入,每个插入 100 个数据集。是否有可能,如果可以,这样做的方法是什么?
【问题讨论】:
【参考方案1】:虽然 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 中感谢以赛亚
【讨论】:
还有一个问题是如何实现“插入忽略”?添加 100 条记录时,其中一条可能已存在于数据库中,如果存在,则拒绝添加所有 100 条记录。【参考方案2】:当插入非常大的多数组时,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();
【讨论】:
【参考方案3】:call_user_func_array([$query, 'values'], $data);
【讨论】:
以上是关于kohana orm3中的多插入的主要内容,如果未能解决你的问题,请参考以下文章