kohana orm3 中的多重插入

发布于 2024-09-29 01:54:09 字数 410 浏览 6 评论 0原文

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

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

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

In my application i have a loop that executes about 1000 times, inside it i'm creating object and saving it. This is the part of application where i populate my database with data. In common this looks like this:

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

This produces 1000 of INSERT queries. Is it possible to, in some way, made kohana produce multi inserts. Split this into 10 inserts with 100 data sets in each. Is it possible and if yes that what is the way doing so?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

离不开的别离 2024-10-06 01:54:09

虽然 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 中的 Isaiah

Whilst the Kohana ORM doesn't support multi inserts, you can still use the query builder as follows:

$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();
}
  • you'll still need to split the data up so the above doesn't try to execute a query with 1000 inserts.
  • $data assumes an array of arrays with the values corresponding to the order of the columns

thanks Isaiah in #kohana

风吹过旳痕迹 2024-10-06 01:54:09

当插入非常大的多个数组时,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();
    }
}

php work very slow when insert multi array very big (so that method ::values have array_merge) so more fast:

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();
    }
}
謸气贵蔟 2024-10-06 01:54:09
call_user_func_array([$query, 'values'], $data);
call_user_func_array([$query, 'values'], $data);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文