如何在一个视图中看到两个模型的值并通过一个控制器更新两个模型的值

问题描述:

我有两个模型Group_onesGroup_twos。我在ac_config.ctp文件中显示此值。如何在一个视图中看到两个模型的值并通过一个控制器更新两个模型的值

我的控制器代码低于

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; 
     } 
    } 

我的观点含量低于 Image_one

问题时,当我save按钮。它只能在数据库中保存组2的表单值。当AC Run TimeAC Rest Time显示Group-2然后表单值保存在Model Group_twosAC Run TimeAC Rest Time的数据库显示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两个组同时,当我点击保存按钮任何两个组对应的组值保存在模型中。我的错误是什么,我的逻辑。

感谢您的帮助。

+0

打开'$这个 - >请求 - > data'成数组,它可以兼容,目前你只是覆盖它。 –

+0

我不清楚你的评论。请详细解释 –

+0

在你的代码中你正在执行'$ this-> request-> data = $ site_id_1; $ this-> request-> data = $ site_id_2;'将用第二个覆盖第一个。如果它是'$ this-> request-> data ['site_1'] = $ site_id_1; $ this-> request-> data ['site_2'] = $ site_id_2;'然后你可以将它循环到正确的模型中。 –

简单的设置请求数据之前的两个数组合并:

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

如果这没有帮助,一定要看到你的观点的代码,以及将是有益的。

+0

您的解决方案对于我的问题部分正确。非常感谢 –

根据您的代码,您正在覆盖请求数据数组。你需要做的是你必须单独设置两个数组或者通过合并单个数组。

比你目前的代码覆盖$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); 

你只需要改变这两条线。

另外,我不知道你是如何获取的结果,鉴于两种型号,但你可以单独像下面获取数据:

$site_id_1 = $this->request->getData('site_id_1'); 
$site_id_2 = $this->request->getData('site_id_2');