我有两个模型,我们将命名为Model和RelatedModel。 Model有很多RelatedModel。因此,如果我在验证数组上添加外键验证,如:
public $validate = array(
'foreignKey' => array(
'rule' => 'numeric',
'required' => true,
'message' => 'The id of relatedmodel should be a number'
)
)
在我创建一个add()函数来保存新的寄存器之后,在这个函数中我使用saveAssociated和validation true,这个失败会抛出错误' relatedmodel的id应该是一个数字'。
我在保存模型之前,同时调试代码并保存两个模型的相关检查验证。
这是一个问题吗?
我认为这个函数应该做的是验证Model,保存它,添加RelatedModel的foreignKey,然后在保存之前验证它。
答案 0 :(得分:1)
我最近才谈到这个问题。这不是一个问题,saveAssociated()
的目的是不幸地以这种方式工作。
您可以做的是使用模型验证器动态更改required => true
。查看书籍了解更多信息。
http://book.cakephp.org/2.0/en/models/data-validation.html#dynamically-change-validation-rules
答案 1 :(得分:0)
这与您给定的规则一样正常。 Cake中的required
表示它希望在保存之前在保存数据中设置foreignKey
的值。所有验证都将在Cake保存数据之前发生(因此在生成foreignKey
之前)。
如果允许Cake在幕后为您生成此文件,则不需要验证它是否为数字。如果您想检查是否正在传递UPDATE
的数据,您可以将required
仅修改为update
,如下所示: -
public $validate = array(
'foreignKey' => array(
'rule' => 'numeric',
'required' => 'update',
'message' => 'The id of relatedmodel should be a number'
)
)
我个人不打算验证外键,除非用户设置它们而不是Cake。
<强>更新强>
要验证表单提交中是否存在foreignKey
,您可以从验证规则中删除required
选项: -
public $validate = array(
'foreignKey' => array(
'rule' => 'numeric',
'message' => 'The id of relatedmodel should be a number'
)
);
这将允许您传递数据,其中foreignKey
不存在,而不会在验证错误的同时发出验证错误。