2016-12-06 3 views
0

Ich versuche, Fußballtisch App zu erstellen. Ich habe 3 Tabellen - teams(id, name), matches(id, home_team_id, away_team_id, round_id) und rounds(id, round_num). home_team_id und away_team_id sind Fremdschlüssel, Verweis auf teams Tabelle. und round_id ist f.k. Verweise auf rounds Tabelle. Zum Beispiel habe ich 4 Teams - juventus, milan, chelsea, arsenal. Also, wenn ich Match erstellen möchte - zuerst erstelle ich Runde. Alles, was ich hier brauche, ist die Nummer der Runde (zum Beispiel die vierte Runde). Dann gehe ich und füge Spiele in dieser Runde - wählen Sie Heimmannschaft (zum Beispiel juventus) und wählen Sie dann Auswärtsmannschaft (zum Beispiel milan) und dann absenden. Das Problem ist, das nächste Mal, wenn ich ein Match erstellen werde, sollte ich kein Match erstellen können, das bereits gespielt wurde. Wenn juventus gegen milan gespielt wird, sollte der Benutzer dieses Match nicht erneut erstellen können. also brauche ich home_team_id und away_team_id um zusammen einzigartig zu sein, und nur zusammen (nicht getrennt)! Wie soll ich das machen? Ich habe versucht, es wiewie man mehrere Spalten zusammen einzigartig machen yii2

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

zu validieren, sondern statt zu verhindern Speichern von Daten und Fehlermeldung, außer Kraft setzen es Spiel

+1

Es scheint nicht ein Problem mit Ihrer Regel. Wenn Sie die Regel entfernen, wird die bestehende Übereinstimmung überschrieben? Wenn ja, ist das Problem woanders. – topher

Antwort

3

einfach es vorhandene setzen in Ihrem „Spiel“ -Modell Regeln:

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

Sie müssen sicherstellen, dass:

  1. Ihre Attribute Validierung aktiviert $model->save(true)
  2. Attribut existiert in Szenario-Array, wenn Sie es verwenden.

    public function scenarios(){ 
        return array_merge(parent::scenarios(), [ 
         ..., 
         self::SPECIFIC_SCENARIO => ['home_team_id'] 
        ]); 
    } 
    
Verwandte Themen