Cakephp插入忽略功能?

时间:2010-05-13 22:45:07

标签: cakephp model insert

有没有办法在不使用模型>查询功能的情况下在蛋糕中执行“插入忽略”?

            $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]

能够设置一些“不关心”的标志或选项

会很棒

2 个答案:

答案 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` )");