CakePHP保存外键问题


CakePHP saving Foreign Key Issue

我在另一个名为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仍然没有成功。我认为这排除了数据库问题,并且与我如何关联模型有关。

请在用户模型中添加关系

var $hasOne = array(
'Basic' => array(
    'className' => 'Basic',
    'foreignKey' => 'user_id',
    'conditions' => '',
    'fields' => '',
    'order' => ''
   )
 );

您请求的数组应该做成:

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保存到基本表中。

不要忘记定义模型关联船舶。