问题:Symfony 中的# Postgres 部分唯一索引

Postgres 可以做部分唯一索引,但我找不到任何支持这一点的学说文档。

http://www.postgresql.org/docs/current/interactive/indexes-partial.html#INDEXES-PARTIAL-EX3

我如何在 Symfony 中拥有一个实体,例如电子邮件。我想在哪里存储默认电子邮件的布尔标志。

电子邮件表看起来像,

id,user_id,email,default
1,1,email@something.com,false
2,1,email2@something.com,true
3,1,email3@something.com,false

我想要对 user_id 和 default u003d true 的唯一约束。

SQL我会做类似的事情,

CREATE UNIQUE INDEX default_constraint ON emails (user_id)
    WHERE default;

还有另一种方法可以做到这一点吗?我考虑了实体中的 prePersist 函数,但这需要调用 db 来检查。

编辑:我也在考虑一个事件监听器,http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html

我不确定我想听每个 prePersist 事件,我可以听一个特定的实体而不是用 if 语句进行过滤。例如 if ($entity instanceof Product) {

解答

我认为教义现在确实支持这一点!查看学说注释参考,特别是 @index 部分。

<?php
/**
 * @Entity
 * @Table(name="ecommerce_products",indexes={@Index(name="search_idx", columns={"name", "email"}, options={"where": "(((id IS NOT NULL) AND (name IS NULL)) AND (email IS NULL))"})})
 */
class ECommerceProduct
{
}
Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐