Laravel Eloquent批量插入或更新

时间:2014-11-14 17:28:03

标签: php csv laravel laravel-4

我正在编写一个类来处理将CSV文件中的数据导入本地数据库。目的是从我们的电子邮件平台提取电子邮件发送报告,并使用每个电子邮件的最新状态更新我们的本地数据库。

我正在逐行解析CSV并将每行推入下面的函数。

private function intoDB($id,$data,$schema,$chunk = 500) {

    if(!isset($this->emails)) {
        $this->emails = [];
    }

    $email = [];

    foreach($schema as $key => $value) {
        $email[$value] = $data[$key];
    }

    $email['created_at'] = new \DateTime;
    $email['updated_at'] = $email['created_at'];        

    $this->emails[] = $email;

    if(count($this->emails) > $chunk) {
        \Email::insert($this->emails);
        $this->emails = [];
    }
}

$schema变量将CSV列与表字段匹配,如下所示:

    $schema = [
        1 => 'campign_id',
        2 => 'email'

    ];

这非常适合用于插入表格以前从未见过的新数据,如果已经有相同的campaign_id和电子邮件组合,我想更新一行。我知道firstOrNew()但是出现了以下错误:

Column not found: 1054 Unknown column '0' in 'where clause' (SQL: select * from `emails` where (`0` = 59 and `1` = xxx@xxx.com

我认为这是因为我没有创建模型,直到我保存数据(它太慢而无法一个一个地保存)

有什么方法吗?

谢谢!

0 个答案:

没有答案