2014-07-11 2 views
0

편집 사례의 두 테이블에 편집 된 데이터를 저장하고 싶습니다.cakePHP 데이터가 삽입되었지만 편집 사례에서 업데이트해야합니다.

표 1 : equipment_types -> 데이브 설비 유형에

표 2 : equipment_types_sizes -> 각 장비 유형의 크기를 저장합니다.

문제점 : 표 2의 데이터 equipment_types_sizes가 다시 삽입되지만 편집시 업데이트해야합니다.

enter image description here

HTML 폼

<input id="EquipmentTypeSize0" class="form-control valid" type="text" name="data[Sizes][0][sizes]" value="4"> 

<input id="EquipmentTypeSize1" class="form-control valid" type="text" name="data[Sizes][1][sizes]" value="3"> 

<input id="EquipmentTypeSize2" class="form-control valid" type="text" name="data[Sizes][2][sizes]" value="1"> 

EquipmentsController.php

if ($this->request->is('post')) { 
      $this->EquipmentType->set($this->request->data); 
      if ($this->EquipmentType->validates()) { 
       $this->EquipmentType->id = $id; 
       if ($this->EquipmentType->saveAll($this->request->data)) { 
        $this->Session->setFlash('Equipment Type has been updated successfully', 'default', 'success'); 
        $this->redirect(array('controller' => 'equipments', 'action' => 'listequipmenttypes', 'admin' => true)); 
        exit; 
       } 

      } 
} 

생성 어레이

Array 
(
    [EquipmentType] => Array 
     (
      [id] => 58 
      [name] => Test type 3 
      [description] => dadaddas 
     ) 

    [Sizes] => Array 
     (
      [0] => Array 
       (
        [sizes] => 4 
       ) 

      [1] => Array 
       (
        [sizes] => 1 
       ) 

      [2] => Array 
       (
        [sizes] => 2 
       ) 
     ) 
) 

EquipmentType 모델

class EquipmentType extends AppModel { 
    public $useTable = 'equipment_types'; 
    var $name = 'EquipmentType'; 
    public $cacheQueries = false; 

    public $hasMany = array(
     'Sizes' => array(
      'className' => 'EquipmentTypesSize' 
     ) 
    );   

    public $belongsTo = array(
     'AddedBy' => array(
      'className' => 'User', 
      'foreignKey' => 'added_by', 
      'fields' => array('first_name', 'last_name', 'email') 
     ), 
     'ModifiedBy' => array(
      'className' => 'User', 
      'foreignKey' => 'modified_by', 
      'fields' => array('first_name', 'last_name', 'email') 
     ) 
    ); 


} 

EquipmentTypesSizes 모델은

class EquipmentTypesSizes extends AppModel { 
    public $useTable = 'equipment_types_sizes'; 
    var $name = 'EquipmentTypesSizes'; 
    public $cacheQueries = false; 
    public $belongsTo = array(
     'EquipmentType' => array(
      'className' => 'EquipmentType', 
      'foreignKey' => 'equipment_type_id', 
      'fields' => array('id', 'sizes') 
     ), 
     'AddedBy' => array(
      'className' => 'User', 
      'foreignKey' => 'added_by', 
      'fields' => array('first_name', 'last_name', 'email') 
     ), 
     'ModifiedBy' => array(
      'className' => 'User', 
      'foreignKey' => 'modified_by', 
      'fields' => array('first_name', 'last_name', 'email') 
     ) 
    ); 

    public $validate = array(
     'name' => array(
      'rule1' => array(
       'rule' => 'notEmpty', 
       'message' => 'Please enter Equipment Type.' 
      ), 
     ), 
     'description' => array(
      'rule1' => array(
       'rule' => 'notEmpty', 
       'message' => 'Please enter Equipment description.' 
      ), 
     ) 
    ); 
} 
+0

세트 (DATAHERE) 및 saveAll (DATAHERE)은 잘못된 디자인입니다. 데이터를 한 번만 설정 한 다음 유효성을 확인한 다음 동일한 데이터를 저장하십시오. 다시 덮어 쓰지 마십시오. 따라서 인수없이 saveAll()을 사용하면 데이터를 이미 설정하고 유효성을 검사 할 때 더 나은 선택이 될 수 있습니다. 추신 : 당신은 또한 다시 유효성 검사를하지 않아도됩니다 (saveAll이하는 일은 무효화해야합니다). – mark

+0

무언가를 업데이트하려면 해당 ID를 전달해야하므로 편집 작업 /보기에서 문제가 발견 될 가능성이 큽니다. – ndm

답변

0

사용 saveAll 또한 올바른 작성하는 것을 잊지 마세요 여러 테이블

에 데이터를 저장하려면 0,123,in

+0

thankyou.need 추가 설명 부탁드립니다 .. –

+0

이 기능이 작동합니다. ? 그렇다면 대답으로 표시 할 수 있습니다 :-) 두 테이블이 모두 연결되어 있으므로 saveAll을 사용하면 부모 테이블에 자식 테이블을 먼저 저장합니다 자세한 내용은 나를 언급 한 cakephp 링크를 참조하십시오. – Confused

관련 문제