我正在编写一个类来处理将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
我认为这是因为我没有创建模型,直到我保存数据(它太慢而无法一个一个地保存)
有什么方法吗?
谢谢!