ストーリー:フォームは2つのモデル(Projectおよび関連ProjectDetail)に入力され、コントローラはsaveAllでフォームデータを保存しようとします。関連付けられているモデルの一部のフィールド(たとえ、1234がルール '数値'に失敗する)であっても、検証は失敗します。私はデバッグ($ this-> data)を置くことがあります。各モデルのbeforeValidate()呼び出しを呼び出し、 '費用'と '収益'の各フィールドが何らかの形でどのように先行桁を失うかをメモします(日付フィールドは正しくありません)。CakePhp saveAllは関連付けられたモデル内のデータを壊します
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
)
)
2つのフィールドが数字のように見えるので、これは妥当性検査が失敗する理由を説明していないようです。
Project -> beforeValidate()
#1234#
true
true
ProjectDetail -> beforeValidate()
#234#
true
false
だから、何とか、この文字列は、その主導的数字と一緒にその数値ネスを失った:
$cost = $this->data['ProjectDetail']['cost'];
debug('#'.$cost.'#'); //Check for obscure non-printables
debug(is_string($cost));
debug(ctype_digit($cost));
そして出力:だから私はあまりにもbeforeValidate方法で次のように走りました。奇妙な。どのような考えにも感謝します。
編集:はい、モデルは単独で問題なく保存されます。
V.S. PHP 5.3.6ケーキ1.3.10 & 1.3.11
あなたのbeforeValidateコードは何ですか? –
ちょうど少数のデバッグ();上記の電話番号 – jmu
私はそれがバグだと思う、私はまさに同じことを投稿しようとしていた!奇妙なことですが、私の弦はそれの前に「1」が付いています。例えば、 'test' getは '1test'として保存されます。 –