问题本质:需要在数据库级别检查一对(两个字段)的唯一性
id |fild1 |fild2 |
----|------|-------|
1 |A |B | <- OK
2 |D |B | <- OK
3 |A |A | <- OK
4 |A |A | <- ERR - уже есть такая пара A A
5 |B |A | <- OK
通常,您需要一起检查 fild1 和 fild2 的唯一性,而不是单独检查。在谷歌上搜索到 UNIQUE 对此负责。我使用 Symfony 4 + Doctrine。我创建了一个实体并尝试进行这样的检查。
/**
* @UniqueEntity(fields={"fild1"}, groups={"groups1"})
* @UniqueEntity(fields={"fild2"}, groups={"groups1"})
*/
class superClass
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(name="fild1", unique=true )
* @ORM\ManyToOne(targetEntity="App\Entity\fild1")
* @ORM\JoinColumn(nullable=false,referencedColumnName="code")
*/
private $fild1;
/**
* @ORM\Column(name="fild2", unique=true)
* @ORM\ManyToOne(targetEntity="App\Entity\fild2")
* @ORM\JoinColumn(nullable=false,referencedColumnName="code")
*/
private $fild2;
当迁移出现问题时,它会生成 UNIQUE
CREATE UNIQUE INDEX UNIQ_8660A37E5569975D ON currency_links (fild1)
CREATE UNIQUE INDEX UNIQ_8660A37E8105B598 ON currency_links (fild2)
它使得每个字段应该只有一个唯一值,所以我在记录 2 上得到一个错误,因为fild2 中的B更高,在我看来它只是忽略了组
告诉我如何在 Entity 中编写检查将针对 fild1 + fild2 的唯一性,而不是针对每个自己的唯一性?
补充:总的来说,我设法在纯sql上做我需要的事情
ALTER TABLE table_name
ADD UNIQUE INDEX `ix` (`fild1`, `fild2`);
但是Entity中怎么写还不清楚