2016-12-06 6 views
0

私はサッカーテーブルアプリを作成しようとしています。私は3つのテーブル - teams(id, name)matches(id, home_team_id, away_team_id, round_id)rounds(id, round_num)を持っています。 home_team_idおよびaway_team_idは外部キーです。teamsテーブルを参照してください。 round_idがf.kである。 roundsテーブルへの参照。たとえば、私は4チーム - juventusmilanchelseaarsenalを持っています。だから私はマッチを作成したい - 最初に私はラウンドを作成します。私が必要とするのは、ラウンド数を挿入するだけです(例えば、第4ラウンド)。このラウンドで試合を追加し、ホームチーム(たとえばjuventus)を選択し、離れたチーム(たとえばmilan)を選択して提出します。問題は、次に試合を作るときに、すでにプレイした試合を作ることができないはずです。 juventusが本拠地のプレイバックmilanにいる場合、この試合を再度作成することはできません。だから、私はhome_team_idaway_team_idが一緒にユニークで、一緒に(別々ではない)必要があります!私はこれをどのようにすべきですか?私は、それはちょうどあなたの「一致」モデルのルールに入れて試合に複数の列を一意にする方法yii2

+1

あなたのルールに問題があるように思えません。ルールを削除すると、既存の一致が上書きされますか?もしそうなら、その問題は他の場所にある。 – topher

答えて

3

を既存の上書き

[['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'] 
        ]); 
    } 
    
関連する問題