0

我在编辑方法中有以下代码,允许用户编辑他们的帐户详细信息。它同时使用 User 和 Profile 模型,并且应该同时更新两者。

我使用 find 中的 contains 来加载 Profile 信息,并使用控制器顶部的 $uses var 调用 Profile 模型。

但是如何将两个模型都加载到 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() 之前调用 contains() 方法。

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

请注意,在调用 find() 的 read() 之后,此调用 contains() 的效果不会持续存在。

于 2012-09-26T14:53:31.647 回答
0

刚刚这样做:$this->request->data = $user;

而且似乎工作正常。任何人都可以看到这样做有什么问题吗?

于 2012-09-26T15:15:08.440 回答