为了简单起见,我有一个人和他们的电子邮件的excel电子表格。我想要的是使用saveAll在数据库中一次性插入它们。
问题是我需要在电子表格中每次有新人时重新上传。在这种情况下,我需要saveAll来保存所有新人并忽略由于数据库中已存在的旧人而发生的验证错误(人们的电子邮件具有唯一的规则)。有什么想法吗?
编辑:我现在所拥有的是,当saveAll方法尝试保存已存在的记录(即其电子邮件已存在于数据库中)时,它不会保存任何内容。我需要的是保存来自电子表格的新的,并忽略已经存在的那些(即不保存已经存在的那些)。
答案 0 :(得分:1)
将第二个参数设置为false,以便不检查验证。
根据您的要求,我会这样做:
遍历数据并检查该特定记录是否存在,如果它没有,则将其推送到临时数组。
现在您可以将该临时数组用作saveAll调用的参数。
伪代码将是这样的:
foreach ($originalDataToBeSaved as $something) {
if ($this->find('count', array('conditions' => $yourConditions)) == 0) {
$tempArray[] = $something;
}
}
$this->saveAll($tempArray);
修改:我更新了代码以反映Nunser所说的内容,新数据没有ID,因此我们需要使用其他搜索条件进行搜索。
答案 1 :(得分:0)
试试这个
foreach ($originalDataToBeSaved as $key => $something) {
if ($this->hasAny($your_condition_to_chekc_existing_user) {
unset($originalDataToBeSaved[$key]);
}
}
$this->saveAll(($originalDataToBeSaved);
如果您不想验证,请使用 -
$this->saveAll(($originalDataToBeSaved, array('validate' => false));