使用CakePHP saveAll函数可以忽略错误并继续


Have CakePHP saveAll function to ignore errors and continue

为了让它变得简单,我有一个关于人们及其电子邮件的excel电子表格。我想要的是使用saveAll将它们一次全部插入数据库。

问题是,每次电子表格中有一些新人时,我都需要重新上传。在这种情况下,我需要saveAll来保存所有新人,并忽略由于数据库中已经存在的老人而可能发生的验证错误(人员电子邮件具有唯一规则)。有什么想法吗?

EDIT:我现在的情况是,当saveAll方法试图保存一个已经存在的记录(即其电子邮件已经在数据库中)时,它不会保存任何内容。我需要的是保存来自电子表格的新的,忽略已经存在的(即不保存已经存在的)。

将第二个参数设置为false,这样就不会检查验证。

考虑到你的要求,我会这样做:

循环遍历数据并检查该特定记录是否存在,如果不存在,则将其推送到临时数组。

现在,您可以使用该临时数组作为saveAll调用的参数。

伪代码应该是这样的:

foreach ($originalDataToBeSaved as $something) {
    if ($this->find('count', array('conditions' => $yourConditions)) == 0) {
        $tempArray[] = $something;    
    }
}
$this->saveAll($tempArray);

编辑:我更新了代码以反映Nunser所说的内容,新数据没有ID,因此我们需要使用另一个搜索标准进行搜索。

尝试这个

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));