不能在cakephp中保存多个表

时间:2014-06-01 08:01:51

标签: php mysql cakephp

我正在学习cakephp并且已经做了很多。我问这个问题的唯一原因是cakePHP中的文档可能是错误的。  我无法从这个问题的文档或过去的stackoverflow帖子看到为什么(子)教师表不会从(父)用户表中的id表中保存user_id。 我没有得到任何错误,但教师表中的user_id为0,因此它不会从User表中提取它。 我在两个模型上有一对一的关系。 我只是测试保存超过2个模型,我有一个用户和老师。我只需在表单中输入数据并创建一个新用户,也可以创建一个新老师,其中user_id是教师表中的外键。 我不愿问这个问题,因为这里有很多材料,但是我在跟随cakePHP中的文档之后无法看到我的问题。

http://book.cakephp.org/2.0/en/models/saving-your-data.html

    public function addteacher() {
   if ($this->request->is('post')) {
            $this->User->create();

        }
      if (!empty($this->request->data)) {
        // We can save the User data:
        // it should be in $this->request->data['User']

        $user = $this->User->save($this->request->data);

        // If the user was saved, Now we add this information to the data
        // and save the Profile.

        if (!empty($user)) {
            // The ID of the newly created user has been set
            // as $this->User->id.
            $this->request->data['teacher']['user_id'] = $this->User->id; //here is the problem

            // Because our User hasOne Profile, we can access
            // the Profile model through the User model:
             if ($this->User->Teacher->save($this->request->data))
             {
                 $this->Session->setFlash(__('Your post has been saved.'));
                  return $this->redirect(array('action' => 'login'));  

             }
        }
      }


    }
  <?php
  echo $this->Form->create('User');

 echo $this->Form->input('User.username');
 echo $this->Form->input('User.password');


 echo $this->Form->input('Teacher.firstname');   //text
echo $this->Form->input('Teacher.surname');  
echo $this->Form->input('Teacher.address');   //text
echo $this->Form->input('Teacher.suburb'); 
echo $this->Form->input('Teacher.phone'); 

echo $ this-&gt; Form-&gt; end(&#39; Save Post&#39;); ?&GT;

1 个答案:

答案 0 :(得分:0)

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

应该是

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

Capital&#34; T&#34;。型号名称始终为CamelCased。

那说没有必要进行2次保存。你可以使用

$this->User->saveAll($this->request->data);

它将保存用户记录和教师记录,为教师记录添加正确的外键值(假设您已在用户和教师模型之间设置了正确的关联)。