0

我有两个模型,我们将分别命名为 Model 和 RelatedModel。模型有很多相关模型。因此,如果我在验证数组上添加外键验证,例如:

public $validate = array(
'foreignKey' => array(
            'rule' => 'numeric',
            'required' => true,
            'message' => 'The id of relatedmodel should be a number'
        )
)

在我创建了一个 add() 函数来保存新寄存器并在这个函数中我使用 saveAssociated 和验证 true 之后,这个函数失败并抛出错误“相关模型的 id 应该是一个数字”。

我正在调试代码,并且 saveAssociated 在保存模型之前同时检查两个模型的验证。

这是一个问题吗?

我认为这个函数应该做的是验证模型,保存它,添加相关模型的foreignKey,然后在保存之前验证它。

4

2 回答 2

1

我最近才遇到这个问题。这不是问题,saveAssociated()不幸的是,它被设计为以这种方式工作。

您可以做的是required => true使用模型验证器即时更改。查看本书以获取更多信息。

http://book.cakephp.org/2.0/en/models/data-validation.html#dynamically-change-validation-rules

于 2015-07-09T08:12:01.687 回答
0

这与您给定的规则一样有效。required在 Cake 中意味着它希望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不存在的数据而不会引发验证错误,同时验证它是否存在。

于 2015-07-09T08:26:36.730 回答