取决于字段值的唯一约束

问题描述 投票:0回答:1

我需要为我的订阅表创建一个唯一约束,以不允许用户同时拥有两个活动订阅。我创建了迁移并更新了我的实体类:

CREATE UNIQUE INDEX unique_user_id_status ON user_subscription_plan (user_id, status)

但我刚刚意识到状态字段可以有多个值(活动、非活动、已处理),因此我可能只有当两个状态处于活动状态时才应该有此约束,但例如我可以有两个已处理的状态。这是对的吗?那么我该如何在实体类上做到这一点呢?任何建议都将受到高度赞赏。

mysql symfony unique-constraint
1个回答
0
投票

当您使用 MySQL 时,看看基于函数的索引是否有帮助。

create table test (user_id int, status varchar(20));

create unique index ui1_test on test
  (user_id, (case when status = 'active' then status end));

它不会让您插入状态为

active
的两行,但不会阻止您在任何其他状态下插入任意数量的行(您提到了
inactive
processed
)。

看看fiddle进行演示。

© www.soinside.com 2019 - 2024. All rights reserved.