CakePhp saveAll会混淆相关模型中的数据

时间:2011-07-27 15:50:21

标签: php cakephp

故事:表单获取两个模型(Project和相关的ProjectDetail)的输入,控制器尝试使用saveAll保存表单数据。对于相关模型的某些字段,验证失败,即使它不应该(例如1234未通过规则'数字')。经过一些搞砸后我把调试($ this->数据);在每个模型的beforeValidate()调用中调用,注意'cost'和'revenue'字段如何以某种方式丢失其前导数字(而日期字段则不会。此字段也正确验证)。

Project -> beforeValidate()

$this->data = Array
(
    [Project] => Array
        (
            [project_type_id] => 1
            [name] => asdf
            [cost_center] => 1234
        )

    [ProjectDetail] => Array
        (
            [cost] => 1234
            [revenue] => 1234
            [project_start] => 2011-07-27
        )

)

ProjectDetail -> beforeValidate()

$this->data = Array
(
    [ProjectDetail] => Array
        (
            [cost] => 234
            [revenue] => 234
            [project_start] => 2011-07-27
        )

)

虽然这本身很烦人,但它似乎无法解释验证失败的原因,因为这两个字段仍然看起来像数字。所以我也在beforeValidate方法中运行了以下内容:

    $cost = $this->data['ProjectDetail']['cost'];
    debug('#'.$cost.'#'); //Check for obscure non-printables
    debug(is_string($cost));
    debug(ctype_digit($cost));

输出:

Project -> beforeValidate()
#1234#
true
true


ProjectDetail -> beforeValidate()
#234#
true
false

所以,不知何故,这个字符串与其前导数字一起丢失了它的数字。奇怪。任何想法都赞赏。

编辑:是的,模型可以自行保存。

V.S。 PHP 5.3.6蛋糕1.3.10& 1.3.11

1 个答案:

答案 0 :(得分:0)

请记住beforeValidate中的return true;

我不清楚你遇到的主要数字问题。但是对于数值:你无法访问beforeValidate中的$this->data['ProjectDetail']['cost'],因为$ this将引用模型,而不是控制器。我不确定为什么它不会给你一个错误。