我正在使用2个模型,用户和配置文件开发应用程序。
当我试图一次编辑两个模型时,我不断得到这个错误
数组到字符串转换[CORE \ Cake \ Model \ Datasource \ DboSource.php,第1006行]
我的$this->request->data
数组位于
array(
'User' => array(
'password' => '*****',
'id' => '6',
'first_name' => 'some',
'middle_name' => 'kjkj',
'last_name' => 'one',
'username' => 'kadjssa',
'group_id' => '5',
'mobile_no' => '7867868'
),
'Profile' => array(
'skype' => 'shrinet'
)
)
我的用户控制器编辑功能包含
public function editClient($id = null) {
$this->User->id = $id;
if (!$this->User->exists()) {
throw new NotFoundException(__('Invalid user'));
}
debug($this->request->data);
if ($this->request->is('post') || $this->request->is('put')) {
$this->request->data['User']['user_id'] = $this->Auth->User('id');
$this->request->data['Profile']['user_id'] = $id;
debug($this->request->data);
print_r (debug($this->User->invalidFields()));
if ($this->User->saveAll($this->request->data)) {
$this->Session->setFlash(__('The user has been saved'));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The user could not be saved. Please, try again.'));
}
} else {
$this->request->data = $this->User->read(null, $id);
}
$groups = $this->User->Group->find('list');
$this->set(compact('groups'));
}
调试其给予
SQL Query: INSERT INTO `mvs`.`users` (`id`, `first_name`, `middle_name`, `last_name`, `username`, `password`, `group_id`, `mobile_no`, `user_id`, `modified`, `created`) VALUES (Array, Array, Array, Array, Array, Array, Array, Array, Array, '2013-07-05 00:07:13', '2013-07-05 00:07:13')
请帮助我......提前致谢
答案 0 :(得分:0)
文档建议根据具体情况使用saveAssociated
或saveMany
此功能接收与前两个相同的选项,通常是向后兼容的功能。建议使用saveMany或saveAssociated,具体取决于案例
因此,首选是将saveAll
更改为saveAssociated
,因为我认为只有一个用户和一个个人资料。
所有saveAll所做的就是致电Set::numeric(array_keys($data))
,如果是true,
则致电saveMany
,否则致电saveAssociated
。问题可能在于Set::numeric
比较。如果你想深究这一点,请进行
Set::numeric(array_keys($this->request->data));
如果它为您提供true
,则必须将您的数组视为数字索引。然后你需要开始调试为什么会这样,检查Set::numeric函数,错误检查在哪里,然后更改它或将其报告为错误。
我认为尝试调试比将saveAll
更改为saveAssociated
更麻烦,因为您评论说最后一个没有问题。
答案 1 :(得分:0)
感谢上帝,
我发现决议......
只需使用$this->User->saveAll($this->request->data, array('atomic' => false, 'deep' => true));
代替$this->User->saveAll($this->request->data);
,因为
在使用atomic选项设置为false检查saveAssociated调用时要小心。它返回一个数组而不是布尔值 ch http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-saveassociated-array-data-null-array-options-array