2016-12-06 3 views
0

축구 테이블 앱을 만들려고합니다. 나는 3 개의 테이블 - teams(id, name), matches(id, home_team_id, away_team_id, round_id)rounds(id, round_num)을 가지고 있습니다. home_team_idaway_team_id은 외래 키이고 teams 테이블을 참조하십시오. round_id은 f.k이다. rounds 테이블에 대한 참조. 예를 들어, 팀 수 : juventus, milan, chelsea, arsenal입니다. 그래서 내가 경기를 만들고 싶다면 - 처음에는 둥글게 만듭니다. 여기에 필요한 것은 라운드 수 (예 : 4 라운드)입니다. 이 라운드에서 경기를 추가하고 홈 팀 (예 : juventus)을 선택한 다음 팀을 선택 (예 : milan) 한 다음 제출합니다. 문제는 다음에 내가 경기를 만들 때 이미 경기되었던 경기를 만들 수 없어야한다는 것입니다. juventus이 (가) milan와 (과) 플레이했을 경우 사용자는 경기를 다시 만들어야합니다. 따라서 home_team_idaway_team_id은 함께 고유해야하며 함께 사용하면 (별도로 사용하지 않아도됩니다)! 어떻게해야합니까? 나는 그것이 그냥 "일치"모델의 규칙에 넣어 경기를여러 열을 함께 고유하게 만드는 방법 yii2

+1

은 규칙에 문제가있을 것 같지 않습니다. 규칙을 삭제해도 기존 일치 항목은 여전히 ​​덮어 씁니까? 그렇다면 문제는 다른 곳에서 발생합니다. – topher

답변

3

기존의 오버라이드 (override)

[['home_team_id', 'away_team_id'], 
     'unique', 'targetClass' => Match::className(), 
     'targetAttribute' => ['home_team_id', 'away_team_id']], 

처럼 검증 대신의 데이터를 저장 방지하고 오류 메시지를 보여 주려고 :

['home_team_id','unique', 'targetAttribute' => ['home_team_id', 'away_team_id']] 

다음 사항을 확인해야합니다.

  1. 속성 유효성 확인 사용 $model->save(true)
  2. 사용하는 경우 시나리오 배열에 속성이 있습니다.

    public function scenarios(){ 
        return array_merge(parent::scenarios(), [ 
         ..., 
         self::SPECIFIC_SCENARIO => ['home_team_id'] 
        ]); 
    } 
    
관련 문제