2009-07-13 10 views
2

私は、次のフィールドを持つフォームを持っていますフィールドのようにケーキPHPのオートマジックフォームや複数のテーブルは、

  • friendName-1
  • friendEmail-1
  • friendName-2
  • friendEmail-2 ...

のfirstName、lastNameの& EMAILADDRESSフィールドが '紹介' テーブルに保存される等 が、10名前/電子メールのペアは、外部キーrefferal_idを含む「フレンド」テーブルに入ります。

通常、私はcakephp 'automagic'フォームを使用し、モデルに自分の検証を設定して、$this->model->save();を実行します。失敗した場合は、モデル検証ルールに戻り、エラーメッセージがフォームhtmlに戻ります。問題はありません。

どうすれば2つのテーブルでこれを行うことができますか?私は、オートマジックのものは行く方法ではないと思っていますが、モデルやカスタムエラーメッセージの検証など、それがなくてもたくさん失うと感じています。

幸いな媒体はありますか?私はケーキにかなり新しいので、私は複数のテーブルでオートマチックを使う方法があるのだろうかと思っています。例えば、あなたが正しくあなたのフィールドに名前を付けることを確認し、基本的に

var $hasMany = array('Friend'); 

答えて

6

は、あなたの紹介のモデルで関係を作成しますhttp://book.cakephp.org/view/84/Saving-Related-Model-Data-hasOne-hasMany-belongsTo

を参照してください。

echo $form->create('Referral'); 
echo $form->input('first_name'); 
echo $form->input('last_name'); 
echo $form->input('email'); 
foreach (range(0,9) as $index) { 
    echo $form->input('Friend.'.$index.'.name'); 
    echo $form->input('Friend.'.$index.'.email'); 
} 
echo $form->end(); 

そして、あなたの紹介コントローラで

function add() { 
    if(!empty($this->data)) { 
     $this->Referral->saveAll($this->data, array('validate'=>'first')); 
    } 
} 
2

はまず、私は本当にあなたが 'friendName-1' と呼ばれるテーブル内の20個のフィールドを持っていないことを願って、 'friendEmail-1' など2番目の表には、referral_id、friendname、およびfriendemailの3つのフィールドが必要です。正規化したくない場合は、2番目のテーブルは必要ありません。

私はあなたのオートマチックフォームを維持する方法を紹介しています。あなたの紹介モデルには「hasMany」、友人モデルには「belongsTo」を入れてください。その後、FormHelperとModel-> Save()を使用することができます。

+0

:)いいえ、私は自分自身を十分にはっきりさせませんでした。恐ろしい-1、-2のハードコードはhtml形式のものです。私はそれらをループし、友達テーブルの個々の行として保存します。 –

+0

次に、あなたがhasMany/belongsToを使う限り、あなたはautomagicにできるはずです。 –

関連する問題