2016-12-06 42 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表。例如我有4支隊伍 - juventusmilan,chelsea,arsenal。所以如果我想創建匹配 - 首先我創建一輪。我所需要的只是插入一輪(例如第四輪)。然後我在這一輪添加比賽 - 選擇主隊(例如juventus),然後選擇客隊(例如milan)然後提交。問題是,下一次我將創建比賽時,我不應該能夠創建已經發揮的比賽。如果juventusmilan對戰,則用戶不應該能夠再次創建此匹配。所以我需要home_team_idaway_team_id是唯一在一起,只有在一起(不分開)!我應該怎麼做?我試圖驗證它像如何使多列獨一無二yii2

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

而是的防止存儲數據並顯示錯誤信息,它覆蓋現有的匹配

+1

似乎有不符合您的規則的問題。如果刪除規則,現有的匹配是否仍然被覆蓋?如果是這樣的話,問題在別處。 – topher

回答

3

只是把它放在你的「匹配」模式的規則:

['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'] 
        ]); 
    }