Cakephp saveAll不断给出Array转换错误

时间:2013-07-04 17:56:15

标签: cakephp-2.0 model-associations

我正在使用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') 

请帮助我......提前致谢

2 个答案:

答案 0 :(得分:0)

文档建议根据具体情况使用saveAssociatedsaveMany

  

此功能接收与前两个相同的选项,通常是向后兼容的功能。建议使用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