cakephp saveAssociated和validation foreign_key失败

时间:2015-07-09 07:59:10

标签: validation cakephp cakephp-2.6

我有两个模型,我们将命名为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,然后在保存之前验证它。

2 个答案:

答案 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不存在,而不会在验证错误的同时发出验证错误。