2011-08-25 90 views
0

我有表及其SQL是如下:外键约束失败,Zend_Db_Table类

CREATE TABLE item (
itemID INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, 
name VARCHAR(100) NOT NULL, 
price FLOAT NOT NULL, 
stock INTEGER NOT NULL 
) ENGINE = InnoDB; 


CREATE TABLE salesrecord (
recordID INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, 
itemID INT UNSIGNED NOT NULL, 
recordDate DATE NOT NULL, 
FOREIGN KEY (itemID) REFERENCES item (itemID) 
) ENGINE = InnoDB; 

这是我的Zend_Db_Table类具体类:

<?php 
class Store_Model_Items extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'item'; 
    protected $_rowClass = 'Store_Model_Item'; 
    protected $_dependTables = array('Store_Model_SalesRecords'); 
} 


<?php 
class Store_Model_SalesRecords extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'salesrecord'; 
    protected $_referenceMap = array(
    'Item' => array(
     'columns' => array('itemID'), 
     'refTableClass' => 'Store_Model_Items', 
     'refColumns' => array('itemID'), 
     'onDelete' => self::CASCADE 
    ) 
); 
} 

当我尝试删除行在项目表中, 我收到此消息:

SQLSTATE [HY000]:常规错误:1451无法删除或更新父行:外键约束失败(newstore/salesrecord,约束salesrecord_ibfk_1外键(itemID)参考文献itemitemID))

回答

0

如果你想删除父表中的记录,首先你应该在一个子表中删除相关的记录。您也可以添加ON DELETE CASCADE检查,它将帮助自动删除子表中的相关记录。尝试以这种方式重新创建FK -

ALTER TABLE salesrecord 
    DROP FOREIGN KEY salesrecord_ibfk_1; -- change FK name here! 

ALTER TABLE salesrecord 
    ADD CONSTRAINT salesrecord_ibfk_1 FOREIGN KEY (itemID) 
    REFERENCES item(itemID) ON DELETE CASCADE; 

用实际的FK名称更改'salesrecord_ibfk_1'。

+0

谢谢Devart,它的工作原理! –