Как видимые две модели оцениваются в одном представлении и обновляют значение двух моделей на одном контроллере

У меня две модели 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;  
        }
    }

Содержимое моего представления ниже Image_one

Проблема возникает, когда я save. Он сохраняет только значения формы группы 2 в базе данных. Когда AC Run Time и AC Rest Time показывают Group-2, затем формируйте значения, сохраняемые в базе данных Model Group_twos и AC Run Time и AC Rest Time show Group-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
}

Если я напишу этот выше код, я получаю

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 обе группы одновременно, и когда я нажимаю кнопку сохранения, любые две группы, которые соответствуют сохранению группы в модели. Какая моя ложь моя логика.

Спасибо вам за помощь.

Ответ 1

Просто слейте два массива перед настройкой данных запроса:

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

Если это не поможет, было бы полезно также увидеть код вашего представления.

Ответ 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');