有没有办法在不使用模型>查询功能的情况下在蛋糕中执行“插入忽略”?
$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]
能够设置一些“不关心”的标志或选项
会很棒答案 0 :(得分:7)
这不是真正的INSERT IGNORE
解决方案,但要在应用级别处理这种情况,您需要使用验证规则。如果您只是将isUnique
验证规则(2.x)(3.x)附加到模型中的guid
字段,那么如果guid,Cake会自动退出保存操作已经存在。
在幕后,它会对数据库进行两次查询,而不是INSERT IGNORE
会产生的查询,但这不应该是一个大问题。
问题可能是它会为这些失败的操作返回false
,您必须使用$this->Model->invalidFields()
来确定问题是什么,以及是否可以忽略它。您可以覆盖Model::save()
以在模型中执行此操作,这样您就不必每次都在控制器中执行此操作。
您可能还想在保存之前使用$this->Model->isUnique(array('guid' => $guid))
(2.x)(3.x)进行手动检查。同样,如果guid不是唯一的,你可以覆盖save
方法并让它静默返回true
,但要注意这类事情。
答案 1 :(得分:-1)
我认为CakePHP中没有这么简单的标志或选项,因为这个警告最初是由MySql生成的,而不是蛋糕本身。如果你不需要guid
上的独特功能,你必须做一些索引改变query.Eg
$this->Model->query("ALTER TABLE `yourdatebasename`.`yourtablename` DROP INDEX `guid` ,ADD INDEX `guid` ( `guid` )");