我尝试创建足球桌应用程序。我有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个团队 - juventus
,milan
,chelsea
,arsenal
。所以,如果我想创造匹配 - 首先我创造圆形。这里我需要的只是插入轮数(例如第4轮)。然后我去添加本轮比赛 - 选择主队(例如juventus
)然后选择离开球队(例如milan
)然后提交。问题是,下次当我创建匹配时,我不应该创建已经播放的匹配。如果juventus
对milan
用户回家,则无法再次创建此匹配。所以我需要home_team_id
和away_team_id
在一起是唯一的,而且只是在一起(不是单独的)!我该怎么办?我试图验证它像
[['home_team_id', 'away_team_id'],
'unique', 'targetClass' => Match::className(),
'targetAttribute' => ['home_team_id', 'away_team_id']],
但不是阻止存储数据并显示错误消息,而是覆盖现有匹配
答案 0 :(得分:3)
只需将它放入你的#34;匹配"模特的规则:
['home_team_id','unique', 'targetAttribute' => ['home_team_id', 'away_team_id']]
你必须确保:
$model->save(true)
如果您使用它,则场景数组中存在属性。
public function scenarios(){
return array_merge(parent::scenarios(), [
...,
self::SPECIFIC_SCENARIO => ['home_team_id']
]);
}