私はサッカーテーブルアプリを作成しようとしています。私は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
が一緒にユニークで、一緒に(別々ではない)必要があります!私はこれをどのようにすべきですか?私は、それはちょうどあなたの「一致」モデルのルールに入れて試合に複数の列を一意にする方法yii2
0
A
答えて
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']]
- 属性の有効化を有効にする
$model->save(true)
あなたがそれを使用すると、シナリオ配列に属性が存在します。
public function scenarios(){ return array_merge(parent::scenarios(), [ ..., self::SPECIFIC_SCENARIO => ['home_team_id'] ]); }
関連する問題
- 1. sequelizeで複数の列に一意のインデックスを定義する方法
- 2. Yii2 Gridview:複数の列をソートする方法は?
- 3. yii2の単一テーブルに属性の値を複数回挿入する方法
- 4. SQLiteの複数の一意の列
- 5. MySQL:複数の列から一意の数を取得する
- 6. mySQL複数のJOIN結果を一意の列として返す方法は?
- 7. yii2 SQLの結果を複数の配列にグループ化する方法
- 8. yii2でアップデート中に一意の検証を確認する方法
- 9. yii2:ビヘイビアのアクセスに複数のルールを追加する方法
- 10. 複数のプロパティを一意
- 11. 複数の配列を単一のforeachにループする方法
- 12. 複数の列の一意性を確認する
- 13. Sparkで複数の列を一度に集約する方法
- 14. 複数の類似モデルに単一コントローラを使用するYii2
- 15. Keychainクラスに複数のパスワードを一意のKeyで保存する方法は?
- 16. geom_textで複数の行に一意のラベルを作成する方法は?
- 17. 複数の列の個別の列に一意の値を分割する
- 18. 複数のデータベースにわたる一意のID列
- 19. 複数の列にわたる一意制約
- 20. Excel - 列Aの一意の識別子ごとに複数の行を1行に変換する方法
- 21. 複数の列を結合して一意の値を得る
- 22. 異なる表の列に対する複数列の一意性制約
- 23. 複数の行を一意のキーで列に変換
- 24. 複数のsettextbodyを送信する方法yii2 send mail
- 25. 複数のdivを一列に並び替える方法
- 26. D3複数のY軸ティックを一列に並べる方法
- 27. パンダグループは複数の列を意味し、単一の列を数えます
- 28. 複数テーブルの列の一致値を選択する方法
- 29. テキスト文字列を一意のIDに変換する方法
- 30. データフレーム内の列を一意にする方法は?
あなたのルールに問題があるように思えません。ルールを削除すると、既存の一致が上書きされますか?もしそうなら、その問題は他の場所にある。 – topher