Save()没有在我的id字段中传递任何内容


Save() not passing anything in my id field

我的调试值设置为2,我认为因为这里没有数据被传递,所以我得到了一个验证错误,这就是为什么这首先看起来是一个幻影错误。我不确定,虽然我仍然是新的Cakephp。

我有一个Addresses控制器,它将数据传递给我的模型,看起来像这样:

public function add() {
    if ($this->request->is('post')) {
        $this->Address->create();
        if ($this->Address->save($this->request->data)) {
            $this->Session->setFlash(__('The address has been saved.'));
            return $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The address could not be saved. Please, try again.'));
        }
    }   
    $users = $this->Address->User->find('list');
    $this->set(compact('users'));
}

然而,当我使用die(debug($this->request->data))))进行调试时,我得到以下结果,显示在我的id字段中没有传递任何内容:

/app/Controller/AddressesController.php (line 61)
array(
    'Address' => array(
        'id' => '',
        'building_number' => '1',
        'street_name' => 'Test Street',
        'city' => 'Cityville',
        'post_code' => 'N113AQ',
        'user_id' => '1'
    )
)

关于为什么没有任何东西被传递到id字段的任何想法?我有控制器工作在完全相同的方式为不同的表,去完美的。

我的Address.id字段在我的数据库中设置为自动递增和正确命名,$this->Address->save()也返回false。

如果$this->request->data包含一个以表单模型命名的数组元素,并且该数组包含模型主键的空值(这里是id),那么FormHelper将为该记录创建一个add表单。对于add方法,HTTP POST谓词是可以的。在CakePHP中,POST用于创建,PUT用于编辑。您可以检查验证并将请求类型更改为非get。

if (!$this->request->is('get')){
  //Save logic here
}