有没有办法在不使用模型->查询函数的情况下在蛋糕中进行“插入忽略”?
$this->Model->save(array(
'id' => NULL,
'guid' => $guid,
'name' => $name,
));
产生错误:
Warning (512): SQL Error: 1062: Duplicate entry 'GUID.....' for key 'unique_guid' [CORE/cake/libs/model/datasources/dbo_source.php, line 524]
能够设置一些表示“不关心”的标志或选项会很棒
最佳答案
这不是真正的 INSERT IGNORE
解决方案,但要在应用程序级别处理这种情况,您将使用验证规则。如果您只是附上 isUnique
验证规则 ( 2.x ) ( 3.x ) 到 guid
如果 guid 已经存在,Cake 将自动退出保存操作。
在幕后,它将对数据库进行两次查询,而不是 INSERT IGNORE
会产生,但这应该不是什么大问题。
一个问题可能是它会返回 false
对于这些失败的操作,您必须使用 $this->Model->invalidFields()
找出问题所在,以及是否可以忽略它。您可以覆盖 Model::save()
在模型中执行此操作,因此您不必每次都在 Controller 中执行此操作。
您可能还想使用 $this->Model->isUnique(array('guid' => $guid))
( 2.x ) ( 3.x ) 在保存之前手动检查。同样,您可以覆盖 save
方法并让它默默返回 true
如果 guid 不是唯一的,但要小心这种事情。
关于Cakephp 插入忽略功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2830808/