0

ユーザーがアカウントの詳細を編集できるようにする編集メソッドに次のコードがあります。User モデルと Profile モデルの両方を使用し、両方を更新する必要があります。

私はプロファイル情報をロードするために検索での包含を使用し、コントローラーの上部にある $uses 変数を使用してプロファイル モデルも呼び出しました。

しかし、両方のモデルを read メソッドにロードするにはどうすればよいでしょうか?

$user = $this->User->find('first', array( 
                    'conditions' => array('User.id' => $this->Auth->user('id')),
                    'contain'=>'Profile'
                ));

        if ($this->request->is('post') || $this->request->is('put'))
        {
            if ($this->User->save($this->request->data))
            {
                $this->Session->setFlash(__('Your account has been saved'));
                $this->redirect(array('controller'=>'users','action'=>'edit'));
            }
            else
            {
                $this->Session->setFlash(__('Whoops! Something went wrong... try again?'));
            }
        }
        else
        {
            $this->request->data = $this->User->read(null, $user['User']['id']);
        }
4

3 に答える 3

1

ドキュメントからわかる限りread()、期待されるフィールドのみが表示されます。関連するモデルを読みたい場合は、find代わりに使用してください。

これの代わりに:

$this->request->data = $this->User->read(null, $user['User']['id']);

これを使って:

$this->request->data = $this->User->find('all', 
       array(
         'conditions' => array('User.id' => $user['User']['id']), 
         'contain'    => 'Profile'
       )
);

http://book.cakephp.org/1.3/en/view/1018/find

于 2012-09-26T14:35:39.763 に答える
0

read() の直前に、contain() メソッドを呼び出すことができます。

$this->User->contain(array('Profile'));
$this->request->data = $this->User->read(null, $user['User']['id']);

この contain() の呼び出しの効果は、find() の read() を呼び出した後は持続しないことに注意してください。

于 2012-09-26T14:53:31.647 に答える
0

これをしただけです:$this->request->data = $user;

そして、うまくいくようです。この方法で問題が発生することはありますか?

于 2012-09-26T15:15:08.440 に答える