我正在从几个远程数据源中提取数据,进行重组以适合我的模型架构,最后将数组传递给 MyModel::saveAll();
我想避免导入重复记录(即,如果MyModel.external_id = 120
&MyModel.external_type = 'basecamp.comment'
在数据库中已经存在,则不要导入)。
解决这个问题的最有效方法是什么?
$data['MyModel'] = [
[
'title' => 'foo',
'created' => '2013-12-18 11:29:06',
'external_id' => 120,
'external_type' => 'github.commit'
],
[
'title' => 'bar',
'created' => '2013-12-18 13:22:06',
'external_id' => 120,
'external_type' => 'basecamp.comment'
]
];
注意:请注意,这MyModel.external_id
并不是唯一的。
这是验证起作用的地方。在您的MyModel
课程中,添加以下内容:
public $validate = array(
'external_type' => array(
'rule' => 'idAndTypeUnique',
'message' => "Type and ID already exist"
)
);
public function idAndTypeUnique()
{
$existing = $this->find('first', array(
'conditions' => array(
'external_id' => $this->data[$this->name]['external_id'],
'external_type' => $this->data[$this->name]['external_type']
)
));
return (count($existing) == 0);
}
您的saveAll()
通话看起来像:
$this->MyModel->saveAll($data, array('validate' => true));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句