2012-01-24 3 views
4

내 MySQL 테이블의 기본 테이블은 2 개의 열 (space_id (INTEGER) 및 DATE)의 합성입니다. 그것은 원시 SQL에서 잘 작동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; 

는, 내가 중복을 만들려고하면 불평하지만, 내가 행을 같은 날 또는 같은 space_id를 만들 수 있습니다.

그러나), YII 새로운 개체()를 사용하여 때 (저장, 그것은 마치 "space_id는"고유해야합니다 뿌려줍니다.

모델이 중요한 경우 "Giix"를 사용하여 모델을 생성했습니다.

나는 모델에이 코드를 추가하려고하지만, 도움이되지 않았다 :

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

답변

10

당신의 액티브 클래스에이 코드를 추가하면 괜찮지 만 YII 이미 MySQL의 테이블 선언에서 그 정보를 가지고 있기 때문에 필요는 없습니다. YII가 고유해야 "space_id"에 대해 불평 할 때

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

는 giix()는 당신의 액티브 클래스에서 규칙에 대한 유효성 검사 규칙을 추가 한 것이다. 이러한 규칙은 ActiveRecord가 저장되기 전에 확인되며 모든 규칙이 정상이면 저장됩니다. 자세한 내용은 Data Validation section of Definitive Guide을 읽어보십시오.

+0

giix가 일부 유효성 검사를 수행하고있었습니다. –

관련 문제