php - 使用 CakePHP 将记录插入数据库会导致外键冲突

标签 php mysql database cakephp foreign-keys

我现在使用 CakePHP(几天了),但在使用外键插入记录时遇到问题。

基本思想,仓库。

我有一个warehouses表来保存所有可用的仓库,我有一个warehouse_types表来保存不同类型的仓库。 warehouse_types 表中已包含一些数据。

我有一个简单的添加 View (基于 CakePHP's Cookbook 中的博客示例),我让它显示数据库中不同类型的名称。

当我保存页面时,出现数据库错误。

Error: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`kvs`.`warehouses`, CONSTRAINT `warehouses_ibfk_1` FOREIGN KEY (`warehouse_type_id`) REFERENCES `warehouse_types` (`id`))

正在生成的 SQL 是:

SQL Query: INSERT INTO `kvs`.`warehouses` (`name`, `location`, `modified`, `created`) VALUES ('Name Text', 'Location Text', '2014-04-02 12:07:13', '2014-04-02 12:07:13') 

如果我在request->data对象中输出信息,则表明它正在获取warehouseType_id的值。

array(
    'Warehouse' => array(
        'name' => 'Name Text',
        'location' => 'Location Text',
        'warehouseType_id' => '1'
    )
)

对此的任何帮助都会很棒!

我的数据库表如下:

CREATE TABLE `warehouses` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `location` varchar(255) DEFAULT NULL,
  `warehouse_type_id` int(10) unsigned NOT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `warehouse_type_id` (`warehouse_type_id`),
  CONSTRAINT `warehouses_ibfk_1` FOREIGN KEY (`warehouse_type_id`) REFERENCES `warehouse_types` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;

CREATE TABLE `warehouse_types` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

我的模型如下:

class Warehouse extends AppModel{
    public $belongsTo = 'WarehouseType';
}

class WarehouseType extends AppModel{

}

我的观点(add.ctp)如下:

<h1>Add Warehouse</h1>
<?php
echo $this->Form->create('Warehouse');
echo $this->Form->input('name');
echo $this->Form->input('location');
echo $this->Form->input('warehouseType_id');
echo $this->Form->end('Create Warehouse');
?>

最后,我的 WarehousesController 中的 add 方法:

public function add(){
        //Check Request to see if it is a Post
        if($this->request->is('post')){
            $this->Warehouse->create(); //Make a new Warehouse object
            debug($this->request->data);
            if($this->Warehouse->save($this->request->data)){ //Try and save Warehouse
                $this->Session->setFlash(__('Warehouse '.$this->request->data['Warehouse']['name'].' created'));
                return $this->redirect(array('action' => 'index')); //Redirect back to Warehouse list
            }
            $this->Session->setFlash(__('Unable to add Warehouse :('));
        }
        $this->set('warehouseTypes', $this->Warehouse->WarehouseType->find('list'));
    }

我已经在这里阅读了这个似乎最相关的答案,但我迷失了:CakePHP Can't insert record with foreign key error

还查看了有关保存的文档:http://book.cakephp.org/2.0/en/models/saving-your-data.html#saving-related-model-data-hasone-hasmany-belongsto

最佳答案

您的列名称与 CakePHP 中使用的名称不同。将 CakePHP 更改为使用 warehouse_type_id。 (您的 CakePHP 代码正在使用 warehouseType_id)

关于php - 使用 CakePHP 将记录插入数据库会导致外键冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22885504/

相关文章:

php - 如何使用来自 discord oauth2 登录的访问 token 来获取用户信息

php - 如何在每次 'bulk mysql insert' 之后在后台运行 PHP 函数?

php - prestashop -如何查明产品是否可供销售

php - 基于 Ajax 的搜索 PHP

php - 使用 mysql 查询邮件检索

php - codeigniter 如何在单个 View 中加载两个不同的 mysql 表列表

php - 更新本地 MYSQL 版本 OSX

php - 如何解决 MySQL 中的连接数过多错误?

WPF 数据网格 : Lazy Loading/Inifinite scroll

database - 多列的条件唯一约束