2011-07-27 18 views
0

ストーリー:フォームは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

+0

あなたのbeforeValidateコードは何ですか? –

+0

ちょうど少数のデバッグ();上記の電話番号 – jmu

+0

私はそれがバグだと思う、私はまさに同じことを投稿しようとしていた!奇妙なことですが、私の弦はそれの前に「1」が付いています。例えば、 'test' getは '1test'として保存されます。 –

答えて

0

beforeAlignateのreturn true;を覚えておいてください。

私はあなたが抱えている主要な数字の問題については不明です。しかし、数字の場合:$ thisはコントローラではなくモデルを参照するため、beforeValidateの$this->data['ProjectDetail']['cost']にアクセスすることはできません。なぜそれがあなたにエラーを投げなかったのか分かりません。

+0

ああ、それはあなたが意味していたことです...ええ、私は真実を返しています。 – jmu

関連する問題