ORM UniqueConstraint,空值重复

2024-01-17

我有一个对 3 个字段具有唯一约束的实体。

2 个字段不可为空,第三个字段可为空。

我的问题是,当第三个字段为空时,唯一约束不起作用,因此我可以在数据库中包含一些重复的值,例如 (5,1,null)(5,1,null)

为我, (5,1,null)是一个唯一值,也可以为 null。

你有什么想法 ?

这是我的 ORM 行:

* @ORM\Table(name="table", uniqueConstraints={@ORM\UniqueConstraint(name="table_idx", columns={"field1", "field2", "field3"})})

编辑:可为空值是其他实体的外键,因此我无法放置自定义值。它是一个实体或空。


这可以通过使用来实现两个部分索引 https://stackoverflow.com/a/8289253。但学说注释还不够。我们应该添加一些SQL来解决这个问题。

笔记!我正在使用 PostgreSQL 和迁移 http://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html在我的项目中。

首先创建2个唯一索引(我使用YAML):

uniqueConstraints:
    table_idx_2_fields:
        columns: [ field1, field2 ]
    table_idx_3_fields:
        columns: [ field1, field2, field3 ]

然后使用控制台生成迁移类:

php app/console doctrine:migrations:diff

将会生成SQL,但必须稍微修改一下(添加了 WHERE 子句)

class Version20170622165834 extends AbstractMigration
{
    /**
     * @param Schema $schema
     */
    public function up(Schema $schema)
    {
        // ...

        $this->addSql('
            CREATE UNIQUE INDEX table_idx_2_fields ON tbl (field1, field2)
            WHERE field3 IS NULL;
        ');
        $this->addSql('
            CREATE UNIQUE INDEX table_idx_3_fields ON tbl (field1, field2, field3)
            WHERE field3 IS NOT NULL;
        ');
    }

    /**
     * @param Schema $schema
     */
    public function down(Schema $schema)
    {
        // ...
    }
}

执行生成的 SQL(迁移):

php app/console doctrine:migrations:migrate -n

Done!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORM UniqueConstraint,空值重复 的相关文章

随机推荐

  • 拉取镜像时设备上没有剩余空间

    在 Windows 10 Build 14393 下使用 Docker 1 13 0 9795 当我尝试运行最新的 python 映像 即 3 6 时 出现 设备上没有剩余空间 的情况 gt docker run it python Una
  • 根据 Java 日期在 Postgres 中保存时间戳

    我有一个 Postgres 数据库 其中有一个包含时间戳的表 timeOfProcessing TIMESTAMP 我有一个 Java 日期时间值 java util Date dateTime 并希望将其值存储在该时间戳字段中 没有时区
  • 设置响应 ContentType 的中间件

    在我们基于 ASP NET Core 的 Web 应用程序中 我们需要以下内容 某些请求的文件类型应获得自定义 ContentType 作为响应 例如 map应该映射到application json 在 完整 的 ASP NET 4 x
  • 具有捆绑和缩小功能的 ASP.NET MVC 4 应用程序,为什么在调试模式下启用缩小?

    我刚刚将 ASP NET MVC 3 项目迁移到 MVC 4 NET 4 0 并安装了 NuGet 包Microsoft AspNet Web Optimization为了支持 CSS 和 JavaScript 的捆绑和缩小 我几乎已经完成
  • 如何跟踪 Magento 从哪里调用模板?

    我正在与 Magento 合作 请看下面的代码 有没有一种简单的方法可以找到 HTML 所在的位置 IE 有某种我可以使用的痕迹吗 在管理中转到系统 gt 配置 gt 开发者 从左上角的 配置范围 选择中选择一个商店 然后 调试 部分中将出
  • Git diff 工具对多个提交以及其间的其他提交进行比较

    我们有一个工作流程 其中提交的代码需要由其他开发人员审核 在简单的情况下 可以使用 git diff oldhash newhash gt diff txt 来完成 并将其上传到我们的审查委员会 但是有没有办法在多个提交之间创建差异并排除其
  • 如何使用 Angular 在 HMR 期间保留状态

    在 Angular 中 有没有办法在模块热重新加载后保留应用程序状态 与 VueJS 中发生的情况类似 到目前为止 我已经按照几个教程让 HMR 正常工作 但它所做的只是重新加载应用程序 而不进行实际的页面刷新 满载更快 是的 但仍然没有达
  • ASP.NET MVC ActionFilter - 确定是否是 AJAX 请求

    我使用 ActionFilter 来确定用户在执行操作之前是否有权访问特定资源 例如帐户对象 la Rhino Security 这是一个全局过滤器 如果授权值失败 它会重定向到错误页面 我正在使用以下代码 它适用于整页请求 filterC
  • Android:以编程方式更改视图的绝对位置

    如果您使用 AbsoluteLayout 我知道它已被弃用 但这是解决我的问题的唯一方法 problem https stackoverflow com questions 3438656 android scrollable horizo
  • 列表的最大后缀

    该问题试图找到给定列表的词典最大后缀 假设我们有一个数组 列表 e1 e2 e3 e4 e5 那么 e1 e2 e3 e4 e5 的所有后缀为 e1 e2 e3 e4 e5 e2 e3 e4 e5 e3 e4 e5 e4 e5 e5 那么我
  • 流式传输音频和视频

    我已经尝试了一段时间但很挣扎 我有两个项目 将音频流式传输到服务器以通过网络分发 将音频和视频从网络摄像头流式传输到服务器 以便通过网络分发 到目前为止 我已经尝试过 ffmpeg 和 ffserver PulseAudio mjpegst
  • 进行ajax调用并在qtip中显示内容

    我正在为下拉列表编写代码 下拉列表是根据数据库中的数据填充的 因此 我进行了 2 个 ajax 调用 一个是在 onmouseover 事件上填充下拉列表的内容 另一个是在选择特定选项时进行 ajax 调用以将相关内容显示在屏幕上 现在我想
  • DSOFramer 在另一个窗口中关闭 Excel 文档。如果文件中未保存数据,dsoframer 无法打开并显示“尝试访问无效地址”

    我在用着Microsoft s DSOFramer控件允许我在对话框中嵌入 Excel 文件 以便用户可以选择他的工作表 然后选择他的单元格范围 它与我的对话框上的导入按钮一起使用 问题是当我打电话时DSOFramer s OPEN函数 如
  • Pandas - 对 Na 以外的值使用“ffill”

    有没有办法使用ffill对非值的方法NaN I have NaN在我的数据框中 但我添加了这些NaN using addNan sample colA replace A NaN 这就是我的数据框 df好像 ColA ColB ColC C
  • 如何在pyopengl中使用鼠标旋转立方体

    我知道问题是什么 但我无法找出解决方案 问题在于 旋转是在立方体上固定轴的情况下应用的 因此 如果将一个轴旋转 Pi 弧度 则另一轴看起来就像鼠标控件被反转 我希望它能够做到这一点 因此单击鼠标左键 然后将鼠标向右移动可将立方体向右旋转 将
  • 从 str 和 Enum 继承有哪些注意事项

    使用从两者继承的类有哪些注意事项 如果有 str and Enum 这被列为解决以下问题的可能方法将 Enum 成员序列化为 JSON https stackoverflow com questions 24481852 serialisi
  • 有没有办法判断iphone是否处于漫游状态?

    我正在开发一个 iPhone 应用程序 并且非常想确定该设备是否正在漫游 以便我可以智能地避免用户在脱离家庭网络时花费昂贵的连接费用 我正在编写的应用程序适用于越狱手机 但如果可能的话 我更愿意使用标准 SDK 这是我已经发现的 1 苹果S
  • 处理CursorLoader异常

    我有一个实现 LoaderManager 并使用 CursorLoader 的片段 没什么花哨的 我想捕获查询期间抛出的异常 但我不知道如何捕获 有什么帮助吗 谢谢 我尝试继承并实现一个侦听器 然后尝试继承并实现一个回调 就我而言 最简单且
  • sinon 存根不替换函数

    我正在尝试使用 sinon 存根来替换可能需要很长时间的函数 但是当我运行测试时 测试代码似乎没有使用 sinon 存根 这是我要测试的代码 function takeTooLong return returnSomething funct
  • ORM UniqueConstraint,空值重复

    我有一个对 3 个字段具有唯一约束的实体 2 个字段不可为空 第三个字段可为空 我的问题是 当第三个字段为空时 唯一约束不起作用 因此我可以在数据库中包含一些重复的值 例如 5 1 null 5 1 null 为我 5 1 null 是一个