CakePHP 2.xのsaveAllパススルーメソッドを使用して、3つの異なるモデルデータを保存するシナリオがあります。CakePHP - 特定のフィールドが空白のときsaveManyコールでモデルデータが保存されないようにする
フォーム上モデルは以下のとおりです。
- プロジェクト
- ProjectImage
- ProjectAttachment
1と2は完全に保存されていますが、ProjectAttachmentフィールドに問題があります。あなたは以下の画像を見れば、問題のフィールドは赤枠で強調表示右下、である:ここでhttp://img.skitch.com/20120417-bnarwihc9mqm1b49cjy2bp13cf.jpg
状況です:
次のように私はフィールドを命名している:* ProjectAttachment .0.project_id *、ProjectAttachment.0.name .... * ProjectAttachment.6.project_id * etcここで、数字は、ユーザーが追加した添付ファイルの現在の量を基準にしたもので、制限はありません。したがって、ユーザーがすでに6つのドキュメントを追加している場合は、フィールドはProjectAttachment.7.idとなります。これは、saveAllメソッドを使用するときの命名規則のためです。
2つの非表示フィールドを使用しました.1つはユーザーIDを格納し、もう1つはプロジェクトIDを格納します。
問題は、ユーザーがドキュメントのタイトルに記入せず、アップロードするファイルを選択しないと、フォームが失敗することです。すべての検証ルールを削除すると、フォームは失敗しなくなりますが、空のProjectAttachmentレコードが挿入されます。
project_idフィールドとuser_idフィールド(隠れている)に既に値が入っている可能性がありますか?
シンプルなコンセプトを思いつきました。私のコントローラでは、saveAllコールの前に、空のドキュメントタイトルフィールドが送信されたかどうかを確認します。 $ this-> request-> data ['ProjectAttachment']配列からの関連する配列エントリですが、これはうまくいかないようです。
明確にするために、私は検証ルールを探していません。ユーザーが画像をアップロードしてProjectAttachmentフォームに触れないようにする場合は、saveAll操作が失敗しないようにする必要があります。空白のフィールドをフォームに保存しないでください。
提案がありますか?
敬具、 サイモン