Cakephp模型协会没有踢

时间:2012-01-09 10:21:11

标签: cakephp model associations

   //index.ctp, this forms points to action updateData in profilesController
   $this->Form->input('User.lastname');
   $this->Form->input('Profile.age');
   $this->Form->input('Profile.height');
   $this->Form->input('Associate.city');
   $this->Form->end('Submit');

//user.php 
Class User extends AppModel {
      var $hasOne = array('Profile', 'Associate'};
      var $primaryKey = 'user_id';

}

//profile.php
Class Profile extends AppModel {
   var $belongsTo = array('User');
   var $hasOne = 'Associate';
   var $primaryKey = 'user_id';
}

//associate.php
Class Associate extends AppModel {
   var $belongsTo = array('User');
   var $primaryKey = 'user_id';
}

 //profiles_controller.php

    Class ProfilesController extends AppController{

    function updateData(){

       //output incoming request for debugging purposes
       debug($this->request->data);

       //here i fetch the db to get the id of user
       $options = 
       array('conditions' => array('User.username' => $this->Auth->user('username')),
                 'fields' => array('User.id')
               );

               //find user id so we can find user in related tables
               $id = $this->Profile->User->find('first', $options);

               //here I modify request data so cakephp finds the users through primaryKeys
               $this->request->data['Profile']['user_id'] = $id['User']['id'];
               $this->request->data['Associate']['user_id'] = $id['User']['id'];
               $this->request->data['User']['id'] = $id['User']['id'];



       if($this->request->is('post'){
       //this updates data in table no problem
       $this->Profile->save($this->request->data);
       //this updates data in table no problem either
       $this->Profile->Associate->save($this->request->data);
       //this returns false...it breaks here
       $this->Profile->User->save($this->request->data);


       }

    }

}

表格结构:

User
|id|int|auto increment
|firstname|varchar
|lastname|varchar
|date|timestamp

Profile
|id|int|autoincrement
|user_id|int
|age|int
|height|int

Associate
|id|int|autoincrement
|user_id|int
|city|varchar
|country|varchar

好的,我知道有些人可能会告诉我,为什么我会在profilesController上执行此操作 不在UsersController上。好吧,我的想法是将一些实际的重要用户分开 来自配置文件数据的数据所以我打算在ProfilesController上编写配置文件的代码...因为我正在开发我假设相同的模型关联会自动更新User表中的User.lastname字段。但是是我的代码破坏的部分,我已经尝试但我无法使其工作

目前我心中的联想至少如下:

用户有一个个人资料 用户有一名助理 个人资料属于User 员工属于个人资料和用户

谁能告诉我我做错了什么?我遵循我认为是我的应用程序的逻辑方法,cakephp更新配置文件和关联模型,但用户不受影响。

2 个答案:

答案 0 :(得分:1)

假设您的用户表的primaryKey为“id”,请删除所有$primaryKey行,然后重试。

设置主键的唯一原因是它不遵循CakePHP的默认设置。我会GUESS(看不到你的表格)你'用户'表中的primaryKey字段不是'user_id' - 更可能只是'id',而在其他表格中,它是'user_id' 。如果是这种情况,则无需指定$primaryKey,因为这是CakePHP的默认值。

答案 1 :(得分:0)

事实证明,在阅读了cakephp文档(显然是一个n00b)后,我的代码破解的原因是因为我在模型中有一个回调之前保存。我不知道为了保存数据,我不得不禁用与我提交给你的代码部分无关的回调。在这种情况下的解决方案是这样做:

$this->Profile->User->save($this->request->data, array('callbacks' => false));

我不认识你们,但有时我觉得cakephp文档有点过于简单,我通过查看API发现了这一点。