Cakephp 2.1 手动保存关联对象
Posted
技术标签:
【中文标题】Cakephp 2.1 手动保存关联对象【英文标题】:Cakephp 2.1 Saving associated objects Manually 【发布时间】:2012-04-11 07:49:56 【问题描述】:Mycakephp 版本为 2.1.1。
我正在尝试使用 saveAll() 函数手动保存关联模型
型号
员工有一个地址 员工所属部门所以表
员工(名字、姓氏、年龄、性别、部门 ID)
地址(first_line,second_line,city,state,employee_id)
现在员工创建 add.ctp 有一个接收员工和地址输入的表单
我知道
$this->Employee->saveAll($this->request->data);
这将保存模型,但是 我想手动保存关联
我正在浏览官方 cakephp 文档here,我尝试过类似的方法
$this->Employee->saveAll($data, array(
'fieldList' => array(
'Employee' => array('first_name','last_name','age','sex','department_id'),
'Department' => array('first_line', 'second_line','city','state','employee_id')
)
));
它不工作,并引发以下错误
注意(8):未定义变量:data [APP\Controller\EmployeesController.php,第 118 行]
警告(2):array_keys() 期望参数 1 为数组,给定 null [CORE\Cake\Model\Model.php,第 1996 行]
我是 cakephp 初学者。请帮我。
$this->request->数据:数组
(
[Employee] => Array
(
[first_name] => Jack
[last_name] => Robert
[age] => 32
[sex] => 0
[Department] => Development
)
[Address] => Array
(
[first_line] => HSR Layout
[second_line] => 1st Cross
[city] => Najem
[state] => Barel
)
[Department] => Array
(
[id] => 3
)
)
【问题讨论】:
你能从add()
方法中展示更多吗?你在哪里定义$data
?
你能告诉我如何定义 $data 我不知道吗
如果你不定义$data
,你应该使用$this->request->data
,这样你就得到了你的表单的数据。
我试过了,还是不行
$this->Employee->saveAll($this->request->data, array('fieldList' => array('Employee' => array('first_name','last_name', 'age','sex','department_id'), 'Department' => array('first_line', 'second_line','city','state','employee_id') ));
【参考方案1】:
尝试在fieldList
参数中只使用一个数组:
$this->Employee->saveAll($this->request->data, array('fieldList' => array('Employee.first_name', 'Employee.last_name', 'Employee.age', 'Employee.sex', 'Department.first_line', 'Department.second_line', 'Department.city', 'Department.state', 'Department.employee_id')));
根据手册,fieldList
需要“您希望允许保存的字段数组”。我认为不接受多维数组。
$this->request->data
是你表单的所有字段,你可以用debug($this->request->data)
查看。
【讨论】:
不保存员工和部门 你试过没有第二个参数吗?只是$this->Employee->saveAll($this->request->data)
?并检查了$this->request->data
和debug()
?
它适用于 $this->Employee->saveAll($this->request->data)
好的,您正在尝试保存表单数据中不存在的字段。检查数据库关系和表单字段,我觉得有问题。【参考方案2】:
经过一番研究,我找到了。
$data = array(
'Employee' => array(
'first_name' => $this->request->data['Employee']['first_name'],
'last_name'=>$this->request->data['Employee']['last_name'],
'age'=>$this->request->data['Employee']['age'],
'sex'=>$this->request->data['Employee']['sex'],
'department_id'=>$this->request->data['Department']['id']
),
'Adress' => array(
'first_line' => $this->request->data['Adress']['first_line'],
'second_line'=>$this->request->data['Adress']['second_line'],
'city'=>$this->request->data['Adress']['city'],
'state'=>$this->request->data['Adress']['state']
)
);
$this->Employee->saveAll($data, array('deep' => true))
这样就可以了。
【讨论】:
以上是关于Cakephp 2.1 手动保存关联对象的主要内容,如果未能解决你的问题,请参考以下文章