편집 사례의 두 테이블에 편집 된 데이터를 저장하고 싶습니다.cakePHP 데이터가 삽입되었지만 편집 사례에서 업데이트해야합니다.
표 1 : equipment_types -> 데이브 설비 유형에
표 2 : equipment_types_sizes -> 각 장비 유형의 크기를 저장합니다.
문제점 : 표 2의 데이터 equipment_types_sizes가 다시 삽입되지만 편집시 업데이트해야합니다.
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.'
),
)
);
}
세트 (DATAHERE) 및 saveAll (DATAHERE)은 잘못된 디자인입니다. 데이터를 한 번만 설정 한 다음 유효성을 확인한 다음 동일한 데이터를 저장하십시오. 다시 덮어 쓰지 마십시오. 따라서 인수없이 saveAll()을 사용하면 데이터를 이미 설정하고 유효성을 검사 할 때 더 나은 선택이 될 수 있습니다. 추신 : 당신은 또한 다시 유효성 검사를하지 않아도됩니다 (saveAll이하는 일은 무효화해야합니다). – mark
무언가를 업데이트하려면 해당 ID를 전달해야하므로 편집 작업 /보기에서 문제가 발견 될 가능성이 큽니다. – ndm