2012-01-24 86 views
4

我的MySQL表主要是由2列组成的:space_id(INTEGER)和day(DATE)。具有复合主键的Yii模型

CREATE TABLE `ck_space_calendar_cache` (
    `space_id` int(11) NOT NULL, 
    `day` date NOT NULL, 
    `available` tinyint(1) unsigned NOT NULL DEFAULT '0', 
    `price` decimal(12,2) DEFAULT NULL, 
    `offer` varchar(45) DEFAULT NULL, 
    `presale_date` date DEFAULT NULL, 
    `presale_price` decimal(12,2) DEFAULT NULL, 
    `value_x` int(11) DEFAULT NULL, 
    `value_y` int(11) DEFAULT NULL, 
    PRIMARY KEY (`space_id`,`day`), 
    KEY `space` (`space_id`), 
    CONSTRAINT `space` FOREIGN KEY (`space_id`) REFERENCES `ck_space` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

它可以在原始SQL精细,它抱怨,如果我尝试创建一个重复的,但让我创建行的同一天或同一space_id。但是,在Yii使用新的Object()和save()时,它抱怨好像“space_id”必须是唯一的。

我用“Giix”生成模型,如果它很重要。

我试图将此代码添加到模型,但它并没有帮助:

public function primaryKey(){ 
      return array('space_id', 'day'); 
     } 

回答

10

将此代码添加到您的ActiveRecord类是好的,但因为Yii的已经从你的MySQL表声明的信息不应该是必要的。

public function primaryKey(){ 
     return array('space_id', 'day'); 
    } 

当Yii的抱怨“space_id”是唯一的,giix可能()在你的ActiveRecord类添加验证规则给规则。在保存ActiveRecord之前检查这些规则,并且只有在所有规则都可以的情况下才会保存。阅读Data Validation section of Definitive Guide了解更多信息。

+0

giix正在做一些验证 –