如何使多个列一起独特yii2

时间:2016-12-06 19:39:07

标签: php yii yii2 yii2-advanced-app

我尝试创建足球桌应用程序。我有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个团队 - juventusmilanchelseaarsenal。所以,如果我想创造匹配 - 首先我创造圆形。这里我需要的只是插入轮数(例如第4轮)。然后我去添加本轮比赛 - 选择主队(例如juventus)然后选择离开球队(例如milan)然后提交。问题是,下次当我创建匹配时,我不应该创建已经播放的匹配。如果juventusmilan用户回家,则无法再次创建此匹配。所以我需要home_team_idaway_team_id在一起是唯一的,而且只是在一起(不是单独的)!我该怎么办?我试图验证它像

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

但不是阻止存储数据并显示错误消息,而是覆盖现有匹配

1 个答案:

答案 0 :(得分:3)

只需将它放入你的#34;匹配"模特的规则:

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