2012-01-24 84 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正在做一些驗證 –