//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更新配置文件和关联模型,但用户不受影响。
答案 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发现了这一点。