无法从UsersController更新配置文件表 - cakephp 2.x.

时间:2013-05-07 21:56:25

标签: php mysql cakephp

我在CakePHP中构建一个简单的应用程序,用户可以在其中注册保存在我的数据库的users表中的数据。他们还有一个与用户关联的配置文件,我试图通过利用$ hasOne和$ belongsTo关联来实现这一点。用户拥有一个配置文件,配置文件属于用户。

我创建了一个配置文件表,其中包含id,user_id和配置文件的其他字段。 user_id引用配置文件的ID。但是,当我尝试在视图中编辑配置文件信息时,我无法更新信息。我收到一条错误,指出它正在尝试复制与用户表中的用户ID相对应的“id”。我在UsersController.php中编写了profile_edit函数,这里是代码:

public function profile($id = null) {
    $this->User->id = $id;

    if (!$this->User->exists()) {
        throw new NotFoundException('Invalid user');
    }

    if ($this->request->is('post') || $this->request->is('put')) {
        if ($this->User->save($this->request->data)) {
            $this->request->data['Profile']['user_id'] = $this->User->id;
            $this->User->Profile->save($this->request->data);
            $this->Session->setFlash('Your profile has been updated');
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash('The profile could not be saved. Please, try again.');
        }
    } else {
        $this->request->data = $this->User->read();
    }
}

My Profile.php模型文件:

 <?php
   class Profile extends AppModel {
    public $name = 'Profile';
    public $belongsTo = 'User'; 
   }
   ?>

我的观点文件:

<div class="profiles form">
<?php echo $this->Form->create('User');?>
    <fieldset>
        <legend>Edit Profile</legend>
    <?php
        echo $this->Form->input('Profile.regulator_number');
        echo $this->Form->input('Profile.website');
        echo $this->Form->input('Profile.minimum_account');
    ?>
    </fieldset>
<?php echo $this->Form->end('Submit');?>
</div>
<div class="actions">
    <h3>Actions</h3>
    <ul>
        <li><?php echo $this->Html->link('List Users', array('action' => 'index'));?></li>
    </ul>
</div>

我希望能够更新每个用户的个人资料信息,无论他们是否填写了任何内容。注意:如果新用户注册并且还没有任何配置文件信息,则提交正常。只有更新搞砸了。我可能需要在用户注册后立即将user_id添加到配置文件表中,截至目前,新注册的用户可能在用户表中有信息而不是配置文件表。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

更改此行

$this->request->data['Profile']['user_id'] = $this->User->id;

$this->request->data['Profile']['user_id'] = $id;

这就是原因。它适用于您的创建cuz $ this-&gt; User-&gt; id将为您提供在User表中创建的最后一个ID。类似于$ this-&gt; User-&gt; getLastInsertID();

在编辑中,你想要获取SAME id,这是你最初作为参数传递的那个。

还要考虑在模型中添加其他选项,即其他外键等,以完全建立您的关系。

网站示例

class Profile extends AppModel {
    public $belongsTo = array(
        'User' => array(
            'className'    => 'User',
            'foreignKey'   => 'user_id'
        )
    );
}

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html