Doctrine DBAL 可以批量插入吗?

Posted

技术标签:

【中文标题】Doctrine DBAL 可以批量插入吗?【英文标题】:Can Doctrine DBAL do batch inserts? 【发布时间】:2013-07-29 03:21:32 【问题描述】:

是否可以使用 Doctrine DBAL 对 SQLite DB 进行批量插入?即使以下更有效:

$twitter = new TwitterAPIExchange($twitterAuth);
    $response = json_decode($twitter->setGetfield($getField)
        ->buildOauth($url, $requestMethod)
        ->performRequest());

    foreach($response->statuses as $r) 
        $statement = $app['db']->executeQuery('SELECT * FROM tweets WHERE twitter_id = ?', array($r->id));
        $tweet = $statement->fetch();

        if(empty($tweet)) 
            $app['db']->insert('tweets', array('twitter_id'=>$r->id, 'contents' => $r->text, 'timestamp' => $r->created_at));
        
    

【问题讨论】:

【参考方案1】:

有了 Doctrine2,是的! http://doctrine-orm.readthedocs.org/en/latest/reference/batch-processing.html

Doctrine2 使用 UnitOfWork 模式,所以基本上你可以“持久化”多条记录,然后在最后运行flush - 它会找出插入/更新/等所有数据的最有效方法。这很聪明。

【讨论】:

关于 Doctrine DBAL 的原始问题,而不是 Doctrine 2 ORM。这不仅仅是不同的 Doctrine 版本,而是针对不同需求具有不同抽象级别的不同库。 同意@MykolaZyk

以上是关于Doctrine DBAL 可以批量插入吗?的主要内容,如果未能解决你的问题,请参考以下文章

更新或插入方法中的 Doctrine 2 DBAL 表达式

Yii2中的Active Record可以批量插入数据吗

使用 insert() 方法通过 PHP Doctrine\DBAL 2 插入 DateTime 值

使用 Doctrine DBAL 一次删除多行,可以吗?

MyCat批量插入

Doctrine DBAL 可以与 ORM Query Builder 混合使用吗?