CakePhp saveAll испортил данные в связанной модели - PullRequest
0 голосов
/ 27 июля 2011

История: форма получает данные для двух моделей (Project и связанный ProjectDetail), контроллер пытается сохранить данные формы с помощью saveAll.Проверка не удалась для некоторых полей связанной Модели, даже если это не так (например, 1234 не выполняет правило «числовой»).После некоторого перебора я поставил debug ($ this-> data);вызовы в вызовах beforeValidate () каждой модели, обратите внимание на то, как поля «стоимость» и «доход» в каждом случае каким-то образом теряют свою начальную цифру (в то время как поле даты не делает. Это поле также проверяется правильно).

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

Итак, каким-то образом эта строка потеряла свою численность вместе со своей ведущей цифрой.Странный.Любые мысли приветствуются.

Редактировать: Да, модель сохраняет очень хорошо самостоятельно.

VS Php 5.3.6 Cake 1.3.10 и 1.3.11

1 Ответ

0 голосов
/ 28 июля 2011

не забудьте return true; в beforeValidate.

Мне неясно, какая у вас проблема с цифрой. Но для числового значения: вы не можете получить доступ к $this->data['ProjectDetail']['cost'] в beforeValidate, потому что $ это будет относиться к модели, а не к контроллеру. Я не уверен, почему это не выдало вам ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...