2

我正在使用 2 个模型、用户和配置文件开发应用程序。当我尝试一次编辑两个模型时,我不断收到此错误 Array to string conversion [CORE\Cake\Model\Datasource\DboSource.php, line 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') 

请帮助我...在此先感谢

4

2 回答 2

0

文档建议使用saveAssociatedsaveMany视情况而定

此函数接收与前两个相同的选项,并且通常是向后兼容的函数。建议根据情况使用 saveMany 或 saveAssociated

所以第一个选择是将其更改saveAllsaveAssociated,因为我认为只有一个用户和一个配置文件。

所有saveAll所做的就是调用Set::numeric(array_keys($data)),如果是true,调用saveMany,否则saveAssociated。问题可能就在那个Set::numeric比较中。如果您想深入了解,请进行调试

Set::numeric(array_keys($this->request->data));

如果这给了你true,它必须考虑你的数组是数字索引的。然后你需要开始调试为什么会这样认为,检查Set::numeric函数,错误检查在哪里,并更改它或将其报告为错误。

不过,我认为尝试调试比更改为更麻烦saveAllsaveAssociated因为您评论说最后一个没有问题。

于 2013-07-04T20:21:14.817 回答
0

感谢上帝,我找到了解决方案......只需使用$this->User->saveAll($this->request->data, array('atomic' => false, 'deep' => true));而不是$this->User->saveAll($this->request->data);因为

在检查原子选项设置为 false 的 saveAssociated 调用时要小心。它返回一个数组而不是布尔 ch http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-saveassociated-array-data-null-array-options-array

于 2013-07-05T08:45:23.073 回答