CakePHP - 当某些字段为空时,防止在saveMany调用中保存模型数据

时间:2012-04-17 08:05:35

标签: cakephp cakephp-2.0

我有一个场景,我通过CakePHP 2.x中的saveAll传递方法从一个表单中保存了3个不同的模型数据

表格上的模型是:

  1. 项目
  2. ProjectImage
  3. ProjectAttachment
  4. 1和2完美保存,但我遇到了ProjectAttachment字段的问题。如果您查看下图,相关字段位于右下角,以红框突出显示:http://img.skitch.com/20120417-bnarwihc9mqm1b49cjy2bp13cf.jpg

    情况如下:

    我已将字段命名如下:* ProjectAttachment.0.project_id *, ProjectAttachment.0.name .... * ProjectAttachment.6.project_id * etc其中数字相对于已存在的用户已添加的附件数量,因为没有限制。因此,如果用户已经ALREADY添加了6个文档,则该字段将被称为 ProjectAttachment.7.id ,依此类推。这是因为使用saveAll方法时的命名约定。

    我使用了两个隐藏字段,一个用于存储用户ID,另一个用于存储项目ID。

    问题是如果用户没有填写文档标题并选择要上传的文件,则表单失败!如果我删除所有验证规则,表单不再失败但是插入了空白的ProjectAttachment记录。

    我怀疑问题也可能是project_id和user_id字段(隐藏)已经包含值?

    我考虑了一下,并提出了一个简单的概念:在我的控制器中,在saveAll调用之前,我会检查是否提交了一个空白的文档标题字段,如果是,我会完全删除相关的来自 $ this-> request-> data ['ProjectAttachment'] 数组的数组条目,但这似乎不起作用。

    澄清一点,我不是在寻找验证规则。如果用户决定他们只想上传图片而不是触摸ProjectAttachment表单,那么saveAll操作一定不能失败,如果可能的话,必须简单地不要尝试保存表单中的空白字段。

    有什么建议吗?

    亲切的问候, 西蒙

1 个答案:

答案 0 :(得分:0)

似乎解决方案比我原先想象的要简单得多!我部分在正确的轨道上,如果我遇到任何空白,我必须在 $ this-> request-> data 数组中取消设置变量 ProjectArray 键字段。

我这样做了如下:

    if(!empty($this->request->data['ProjectAttachment'])){
        foreach($this->request->data['ProjectAttachment'] as $key => $value){
            if(is_array($value) && array_key_exists('upload_file', $value)){
                if($value['upload_file']['name'] == ''){ // Blank document file
                    unset($this->request->data['ProjectAttachment']);
                }
            }
        }
    }

我希望有人发现这在某种形式或某种方面有用。

亲切的问候, 西蒙