如何在一个视图中看到两个模型的值并通过一个控制器更新两个模型的值
我有两个模型Group_ones
和Group_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;
}
}
问题时,当我save
按钮。它只能在数据库中保存组2的表单值。当AC Run Time
和AC Rest Time
显示Group-2
然后表单值保存在Model Group_twos
和AC Run Time
和AC Rest Time
的数据库显示Group-1
然后形成的值保存在Model Group_ones
的数据库。
的另一个问题是低于
如果我写这上面的代码然后我得到
if (!$this->request->data) {
$this->request->data = $site_id_2;
$this->request->data = $site_id_1; //this show rest time, run time.
}
再次,如果我写这上面的代码然后我得到
但我需要AC Run Time and AC Rest Time
两个组同时,当我点击保存按钮任何两个组对应的组值保存在模型中。我的错误是什么,我的逻辑。
感谢您的帮助。
简单的设置请求数据之前的两个数组合并:
if (!$this->request->data) { $this->request->data = array_merge($site_id_1, $site_id_2); }
如果这没有帮助,一定要看到你的观点的代码,以及将是有益的。
您的解决方案对于我的问题部分正确。非常感谢 –
根据您的代码,您正在覆盖请求数据数组。你需要做的是你必须单独设置两个数组或者通过合并单个数组。
比你目前的代码覆盖$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');
打开'$这个 - >请求 - > data'成数组,它可以兼容,目前你只是覆盖它。 –
我不清楚你的评论。请详细解释 –
在你的代码中你正在执行'$ 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;'然后你可以将它循环到正确的模型中。 –