如何在一个视图中显示可见的两个模型值并通过一个控制器更新两个模型值

A.A*_*man 11 css php database cakephp toggleswitch

我有两个型号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;  
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的观点内容如下 Image_one

save按下时出现问题.它只在数据库中保存group-2表单值.当AC Run TimeAC Rest Time展示Group-2,然后表单值保存在数据库中Model Group_twos,并AC Run TimeAC Rest TimeGroup-1再形成的值保存在数据库中Model Group_ones.

另一个问题如下

if (!$this->request->data) {
    $this->request->data = $site_id_1;
    $this->request->data = $site_id_2;  // this show rest time, run time
}
Run Code Online (Sandbox Code Playgroud)

如果我写上面的代码然后我得到

Image_two

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

再次,如果我写上面的代码然后我得到

Image_three

但我同时需要AC Run Time and AC Rest Time两个组,当我单击保存按钮时,任何两个组对应组值保存在模型中.我的错误是我的错误.

谢谢你的帮助.

小智 8

在设置请求数据之前,只需合并两个数组:

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

如果这没有帮助,那么查看视图的代码也很有用.


Ahm*_*ani 6

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

下面您当前的代码覆盖$site_id_1$site_id_2:

 $this->request->data = $site_id_1;
 $this->request->data = $site_id_2;
Run Code Online (Sandbox Code Playgroud)

现在您可以通过以下方式传递数据:

$this->request->data['site_id_1'] = $site_id_1;
$this->request->data['site_id_2'] = $site_id_2;
Run Code Online (Sandbox Code Playgroud)

要么

$this->request->data = array_merge($site_id_1, $site_id_2);
Run Code Online (Sandbox Code Playgroud)

你只需改变这两行.

此外,我不知道你如何在两个模型的视图中获取结果,但你可以单独获取数据,如下所示:

$site_id_1 = $this->request->getData('site_id_1');
$site_id_2 = $this->request->getData('site_id_2');
Run Code Online (Sandbox Code Playgroud)