如何在cakephp中保存belongsstomany复选框

时间:2016-07-13 01:42:12

标签: cakephp cakephp-3.x

我有一组属于多种关系的复选框。出于各种原因,我无法使用多个复选框选项。表Tutors与subject表具有belongsToMany关系。我在加载时检查了正确的复选框,当我更新checbox时我得到了正确的复选框数据,但是如何保存?文档说我需要将id放在一个数组中,以便检查正确的Subjects。我尝试了一些东西,但我无法保存数据。我没有收到错误,只是没有保存。

//view

          foreach ($subjects as $key => $item) {
              $sub=$item->name;
              $val=0;
              foreach ($tutor->subjects as $key2 => $item2) {
                  $sub2=$item2->name;
                  if ($sub==$sub2){
                        $val=1;
                       break;
                  }
              }

          echo $this->Form->hidden('subjects.'.$key.'.id', ['value'=>$item->id]);

                echo $this->Form->input('subjects.'.$key.'.checkedvalue', ['label'=>$sub,
                    'checked'=> $val,'type'=>'checkbox']);

           }

//controller
     public function edittest5($id = null)
    {
        $tutor = $this->Tutors->get($id, [
            'contain' => ['AvailabilityForTutors','Subjects']
        ]);
        if ($this->request->is(['patch', 'post', 'put'])) {

            $tutor = $this->Tutors->patchEntity($tutor, $this->request->data(),['associated' => ['AvailabilityForTutors','Subjects']] );
         //  $tutor->dirty('availability_for_tutors', true);
       debug($tutor);


            $this->Tutors->save($tutor,[
                       // 'atomic'=>false,
                        'validate' => false,
                        'associated' => ['Subjects']
                    ]); 


             return $this->redirect(['action' => 'edittest5',$id]);

        }

         $subjects = $this->Tutors->Subjects->find('all', ['limit' => 200]);

返回数据

'first_name' => 'drew',
'subjects' => [
    (int) 0 => [
        'id' => '1',
        'checkedvalue' => '1'
    ],
    (int) 1 => [
        'checkedvalue' => '0'
    ],
    (int) 2 => [
        'checkedvalue' => '0'
    ],
    (int) 3 => [
        'checkedvalue' => '0'
    ],
    (int) 4 => [
        'id' => '5',
        'checkedvalue' => '1'

0 个答案:

没有答案