cakephp使用foreach()保存数据数组
我试图保存来自多个同名输入的大小数据 问题是我无法保存数据。只有最后一个值“size”保存在数据库中cakephp使用foreach()保存数据数组,php,cakephp,Php,Cakephp,我试图保存来自多个同名输入的大小数据 问题是我无法保存数据。只有最后一个值“size”保存在数据库中 if ($this->EquipmentType->save($this->request->data['EquipmentType'], false)) { $id = $this->EquipmentType->getLastInsertId(); $this->loadModel('EquipmentTypesSize');
if ($this->EquipmentType->save($this->request->data['EquipmentType'], false)) {
$id = $this->EquipmentType->getLastInsertId();
$this->loadModel('EquipmentTypesSize');
$sizesArray = $this->request->data['EquipmentType']['size'];
foreach($sizesArray as $val){
$data[] = array('EquipmentTypesSize' => array('sizes' => $val));
}
$this->request->data['EquipmentTypesSize']['equipment_type_id'] = $id;
$this->EquipmentTypesSize->set($this->request->data);
$this->EquipmentTypesSize->save($this->request->data['EquipmentTypesSize']);
$this->Session->setFlash('Equipment type has been added successfully ', 'default', 'success');
$this->redirect(array('controller' => 'equipments', 'action' => 'listequipmenttypes', 'admin' => true));
}
我想把这个保存为
equipment_type_id | size1
equipment_type_id | size2
equipment_type_id | size3
有几个问题——Kai提到的调用
create
就是其中之一
首先,这里是您的代码,但我在看到明显问题的地方添加了注释(我并没有抓住所有问题)
最后,有两件事:
设备类型
模型中。因此,您可以在EquipmentType
模型中创建一个saveWithSizes
方法来保存大部分代码saveAll
方法()。理想情况下,您应该设置表单数据,这样您就可以调用saveAll并让Cake自动处理所有数据。然而,对于你的情况来说,这也许是可能的,也可能是不可能的有几个问题——Kai提到的调用
create
就是其中之一
首先,这里是您的代码,但我在看到明显问题的地方添加了注释(我并没有抓住所有问题)
最后,有两件事:
设备类型
模型中。因此,您可以在EquipmentType
模型中创建一个saveWithSizes
方法来保存大部分代码saveAll
方法()。理想情况下,您应该设置表单数据,这样您就可以调用saveAll并让Cake自动处理所有数据。然而,对于你的情况来说,这也许是可能的,也可能是不可能的<?php
if ($this->EquipmentType->save($this->request->data['EquipmentType'], false)) {
$id = $this->EquipmentType->getLastInsertId();
$this->loadModel('EquipmentTypesSize');
$sizesArray = $this->request->data['EquipmentType']['size'];
foreach($sizesArray as $val){
$data[] = array('EquipmentTypesSize' => array('sizes' => $val));
// WHERE IS THIS $data VARIABLE USED? It seems it's never used?
}
$this->request->data['EquipmentTypesSize']['equipment_type_id'] = $id;
$this->EquipmentTypesSize->set($this->request->data); // NO NEED TO CALL SET HERE - YOU ALREADY PASS DATA IN AS A PARAM TO SAVE
// YOU MUST CALL CREATE BEFORE ADDING A NEW RECORD
$this->EquipmentTypesSize->save($this->request->data['EquipmentTypesSize']);
// I DON'T THINK $this->request->data['EquipmentTypesSize'] HOLDS THE VALUE YOU THINK IT DOES AT THIS POINT
$this->Session->setFlash('Equipment type has been added successfully ', 'default', 'success');
$this->redirect(array('controller' => 'equipments', 'action' => 'listequipmenttypes', 'admin' => true));
}
if ($this->EquipmentType->save($this->request->data['EquipmentType'], false)) {
$id = $this->EquipmentType->getLastInsertId();
$this->loadModel('EquipmentTypesSize');
$sizesArray = $this->request->data['EquipmentType']['size'];
foreach($sizesArray as $val){
$this->EquipmentTypesSize->create();
$this->EquipmentTypesSize->save(array(
'sizes' => $val,
'equipment_type_id' => $id,
));
}
$this->Session->setFlash('Equipment type has been added successfully ', 'default', 'success');
$this->redirect(array('controller' => 'equipments', 'action' => 'listequipmenttypes', 'admin' => true));
}