Cakephp插入忽略功能?

Sea*_*ney 4 cakephp model insert

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

            $this->Model->save(array(
                'id' => NULL,
                'guid' => $guid,
                'name' => $name,
            ));
Run Code Online (Sandbox Code Playgroud)

生成错误:

Warning (512): SQL Error: 1062: Duplicate entry 'GUID.....' for key 'unique_guid' [CORE/cake/libs/model/datasources/dbo_source.php, line 524]
Run Code Online (Sandbox Code Playgroud)

能够设置一些标语或选项"不关心"会很棒

dec*_*eze 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,但要注意这种事情.