2

ユーザーとプロファイルの 2 つのモデルを使用してアプリケーションを開発しています。一度に両方のモデルを編集しようとすると、このエラー Array to string conversion [CORE\Cake\Model\Datasource\DboSource.php, line 1006] my $this->request->dataarray is inが連続して発生します

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、場合によっては

この関数は、前の 2 つと同じオプションを受け取り、通常は下位互換性のある関数です。場合に応じて、saveMany または saveAssociated のいずれかを使用することをお勧めします

saveAllしたがって、最初の選択肢は、それをに変更することです。これは、ユーザーとプロファイルが1saveAssociatedしかないと思うためです。

saveAllが行うのは、呼び出すことだけです。問題はおそらくその比較にあります。その根底に到達したい場合は、デバッグを行いますSet::numeric(array_keys($data))true,saveManysaveAssociatedSet::numeric

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

が得られる場合はtrue、配列が数値的にインデックス付けされていると見なす必要があります。次に、なぜそのように見なされるかのデバッグを開始し、Set::numeric関数をチェックして、どこで悪いチェックを行っているかを確認し、それを変更するか、バグとして報告する必要があります。

saveAllに変更するよりも、それをデバッグしようとする方が面倒だと思いますsaveAssociatedが、最後は問題ないとコメントしたので。

于 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 呼び出しをチェックするときは注意してください。ブール値の代わりに配列を返します

于 2013-07-05T08:45:23.073 に答える