2017-09-16 13 views
12

私は2つのモデルGroup_onesGroup_twosを持っています。私はac_config.ctpファイルにこの値を示します。2つのモデルが1つのビューでどのように見え、1つのコントローラで2つのモデルの値を更新するか

マイコントローラコードが

public function ac_config($id = null) 
    { 
     if (!$id) { 
      $this->Session->setFlash('Please provide a Site id'); 
      $this->redirect(array('action'=>'dashboard')); 
     } 

     $site_id_1   = $this->GroupOne->findById($id); 
     $site_name   = $site_id_1['GroupOne']['site_name']; 
     $ac_one_time  = $site_id_1['GroupOne']['ac_on_time_one']; 
     $group_one_active = $site_id_1['GroupOne']['active']; 

     $site_id_2   = $this->GroupTwo->findById($id); 
     $ac_two_time  = $site_id_2['GroupTwo']['ac_on_time_two']; 
     $group_two_active = $site_id_2['GroupTwo']['active']; 


     if (!$site_id_1) { 
      $this->Session->setFlash('Invalid Site ID Provided'); 
      $this->redirect(array('action'=>'dashboard')); 
     } 

     if (!$site_id_2) { 
      $this->Session->setFlash('Invalid Site ID Provided'); 
      $this->redirect(array('action'=>'dashboard')); 
     } 

     if ($this->request->is('post') || $this->request->is('put')) { 
      $this->GroupOne->id = $id; 
      $this->GroupTwo->id = $id; 

      if (($this->GroupTwo->save($this->request->data)) || ($this->GroupOne->save($this->request->data))) { 
       $this->Session->setFlash(__('AC Configuration has been update')); 
       $this->redirect(array('action' => 'ac_config', $id)); 
      } 
      else 
      { 
       $this->Session->setFlash(__('Unable to AC Configuration has been update.')); 
      } 
     } 

     $this->set(compact('site_name','ac_one_time','group_one_active')); 
     $this->set(compact('ac_two_time','group_two_active')); 

     $this->set('group_one', $site_id_1); 
     $this->set('group_two', $site_id_2); 

     if (!$this->request->data) { 
      $this->request->data = $site_id_1; 
      $this->request->data = $site_id_2; 
     } 
    } 

未満で問題が場合I saveボタン発生

Image_one以下の私のビューコンテンツです。グループ2のフォーム値はデータベースにのみ保存されます。 AC Run TimeAC Rest Timeは、フォームの値が Model Group_twosAC Run TimeAC Rest Timeのデータベースに保存 Group-2を表示すると Group-1は、値が Model Group_onesのデータベースに保存形成を示しています。

もう一つの問題は、私は、この上記のコードを記述する場合

​​

は、私は再び

Image_two

if (!$this->request->data) { 
    $this->request->data = $site_id_2; 
    $this->request->data = $site_id_1; //this show rest time, run time. 
} 

を取得し、私は、この上記のコードを記述する場合、私は

を得る下回っていますImage_three

しかし、私はAC Run Time and AC Rest Timeの両方のグループを同時に必要とし、モデルに保存するグループ値に対応する任意の2つのグループを保存ボタンをクリックすると。私の誤った論理。

ありがとうございました。

+0

電源を入れ 'ます$ this->要求 - > data'を配列は、両方を保持することができます、現在あなたはそれを上書きします。 –

+0

私はあなたのコメントをクリアしていません。もっと詳しく説明してください。 –

+0

あなたのコードでは、 '$ this-> request-> data = $ site_id_1;を実行しています。 $ this-> request-> data = $ site_id_2;は、最初のものを2番目のものに上書きします。それが '$ this-> request-> data ['site_1'] = $ site_id_1だった場合、 $ this-> request-> data ['site_2'] = $ site_id_2;それを正しいモデルにループすることができます。 –

答えて

8

単に要求データを設定する前に2つの配列をマージ:

if (!$this->request->data) { $this->request->data = array_merge($site_id_1, $site_id_2); }

をこれが解決しない場合、同様にあなたのビューのコードを参照することが有用であろう。

+0

あなたのソリューションは私の問題に対して部分的に正しいです。どうもありがとう –

6

コードごとに、要求データ配列を上書きしています。必要なのは、両方の配列を別々に設定するか、または単一の配列でマージする必要があるということです。 $site_id_1を上書きし、あなたの現在のコードの下

$site_id_2によって:

$this->request->data = $site_id_1; 
$this->request->data = $site_id_2; 

は今、あなたは方法の下にデータを渡すことができます:

$this->request->data['site_id_1'] = $site_id_1; 
$this->request->data['site_id_2'] = $site_id_2; 

または

$this->request->data = array_merge($site_id_1, $site_id_2); 

これらの2行を変更するだけです。

また、私はあなたが、両方のモデルのビューで結果を取得する方法を知りませんが、別に何か以下のようなデータを取得することができますに

$site_id_1 = $this->request->getData('site_id_1'); 
$site_id_2 = $this->request->getData('site_id_2'); 
関連する問題