我在另一个名为Basics的表中保存Users表的外键时出现问题。我试图向用户询问一系列问题,每个完成的系列,问题和用户ID都应该保存到相应的表格中。
以下是在模型中进行验证后保存数据的内容。验证成功发生,因为所有数据都已保存,但外键保存为0。
public function pageone() {
if ($this->request->is('post')){
$this->request->data['Table1']['user_id'] = $this->Auth->user('id');
if ($this->User->saveAll($this->request->data)) {
$this->redirect(array('action'=>'pagetwo'));
} else {
$this->Session->setFlash('Your data have not been saved');
}
}
}
在我的模型中,我使用以下代码声明了外键:
var $name = 'Table1';
var $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
这应该声明外键,对吧?我的外键的列名称称为“user_id”。数据类型都是INT。数据库端可能还有其他问题吗?提前谢谢!
更新:所以 - 我现在将我的用户ID隐藏在隐藏字段中。该字段将在我创建的任何其他字段中输入数据库(即使使用与INT(11)相同的数据类型),但它不会保存到名为“user_id”的字段中。例如,我可以将用户ID保存到名为my_id的字段中,但仍然没有运气的user_id。我认为这排除了数据库问题,并且与我如何关联模型有关。
答案 0 :(得分:2)
请在用户模型中添加关系
var $hasOne = array(
'Basic' => array(
'className' => 'Basic',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
答案 1 :(得分:1)
您要求的数组应该像:
Array
(
[User] => Array
(
//field list of User Model
)
[Basic] => Array
(
//field list of Basic Model
)
)
要实现此目的,您可以在服务器端操作请求的数组,或更改表单中的字段名称,如:
<?php echo $this->Form->input('User.first_name', array());?>
//and
<?php echo $this->Form->input('Basic.field_name', array());?>
然后您可以使用以下方法保存相关记录:
$this->User->saveAll($this->request->data, array('deep' => true));
'deep' => true
选项也可以帮助您保存相关记录。它还会自动将user_id保存到基础表中。
不要忘记定义Model association-ships。