Mysql CAKEPHP外键约束-调试显示正确的值

Mysql CAKEPHP外键约束-调试显示正确的值,mysql,cakephp,foreign-keys,Mysql,Cakephp,Foreign Keys,我正在创建我的第一个真正的CakePHP项目。我已经阅读了手册和博客教程,但我绝对不是专家。我在通过表单助手生成的表单向数据库添加数据时遇到问题。表单有两个文本输入和几个选择框,所有这些都正确填充。当我填写表单并点击submit时,它告诉我在第一个选择框上有一个外键约束错误。但是,当我调试$this->request->data时,它具有与之关联的正确值。这里是调试 Array ( [car] => Array ( [stock] => G12

我正在创建我的第一个真正的CakePHP项目。我已经阅读了手册和博客教程,但我绝对不是专家。我在通过表单助手生成的表单向数据库添加数据时遇到问题。表单有两个文本输入和几个选择框,所有这些都正确填充。当我填写表单并点击submit时,它告诉我在第一个选择框上有一个外键约束错误。但是,当我调试$this->request->data时,它具有与之关联的正确值。这里是调试

Array
(
    [car] => Array
        (
        [stock] => G123456
        [vin] => 12345678
        [make_id] => 1
        [car_model_id] => 2
        [year_id] => 20
        [location_id] => 9
        [service_status_id] => 1
        [type_id] => 6
        )

)
为了确保我的模式是正确的,我直接从mysql控制台进行了插入,它工作得非常好。这是我运行的命令

INSERT INTO cars (stock, vin, make_id, car_model_id, year_id, location_id, service_status_id, type_id) VALUES ('G123456', '12345678', '1', '2', '20', '9', '1', '6');
我不确定调用时为什么会出现外键约束错误:

$car = $this->Car->save($this->request->data);
有什么想法吗

编辑CakePHP中错误下的查询是:

INSERT INTO `cars` (`modified`, `created`) VALUES ('2012-02-29 15:53:21', '2012-02-29 15:53:21')
当我从mysql控制台运行该查询时,我得到了相同的错误。外键约束失败,make_id-引用make.id

以下是我的控制器中的add()函数:

public function add()
{   
    $this->set('years', $this->Car->Year->find('list'));
    $this->set('makes', $this->Car->Make->find('list'));
    $this->set('carModels', $this->Car->CarModel->find('list'));
    $this->set('locations', $this->Car->Location->find('list'));
    $this->set('types', $this->Car->Type->find('list'));
    $this->set('serviceStatuses', $this->Car->ServiceStatus->find('list'));
    if(!empty($this->request->data))
    {
        $car = $this->Car->save($this->request->data);  
        //debug($this->request->data, true);
    }
}
下面是视图文件:

<?php
echo $this->Form->create('Car', array('action' => 'add'));
echo $this->Form->input('car.stock');
echo $this->Form->input('car.vin');
echo $this->Form->input('car.make_id');
echo $this->Form->input('car.car_model_id');
echo $this->Form->input('car.year_id');
echo $this->Form->input('car.location_id');
echo $this->Form->input('car.service_status_id');
echo $this->Form->input('car.type_id');
echo $this->Form->end('Add');
?>

问题在于视图。从每个表单输入的开头移除
汽车。
。这是不必要的。create将使用
汽车
模型作为前缀,它将解决问题

<?php
echo $this->Form->create('Car', array('action' => 'add'));
echo $this->Form->input('stock');
echo $this->Form->input('vin');
echo $this->Form->input('make_id');
echo $this->Form->input('car_model_id');
echo $this->Form->input('year_id');
echo $this->Form->input('location_id');
echo $this->Form->input('service_status_id');
echo $this->Form->input('type_id');
echo $this->Form->end('Add');
?>


此查询是您手动创建的还是屏幕上显示的错误?您可以展开屏幕上生成的错误以检查生成的SQL语法。当我手动运行查询时,它工作正常。当我发出$car=$this->car->save($this->request->data)时,我得到了make_id上的外键约束错误。错误下方的错误中显示的查询是:SQL query:INSERT-INTO
cars
修改的
创建的
)值('2012-02-29 15:53:21','2012-02-29 15:53:21'),这就是问题所在,查询生成错误,缺少其他字段。你能更新你的问题吗?你是如何创建表单的?你的数据数组上的
car
键不应该是
car
,大写
C
?@bfavaretto是的,我想你是对的。但我不知道如何使其资本化。我试图将输入表单更改为Car.fieldname而不是Car.fieldname,但键仍然是小写的。我如何改变它?