当前位置: 首页 > 知识库问答 >
问题:

Larvel-没有唯一的约束匹配引用表的给定键-使用多个unique

凌蕴藉
2023-03-14

我在Postgres 7.2中遇到了这个错误:

无效的外键:7错误:没有唯一的约束匹配引用表“假日项目”的给定键(SQL:alter table“假日预订”添加约束“假日项目”\u父假日项目”\u id\u外键(“父假日项目”\u id”)在删除级联上引用“假日项目”(“id”))

以下是我正在尝试的迁移:

Schema::create('holiday_bookings', function (Blueprint $table) {
    $table->uuid('id')->primary();
    $table->uuid('booking_id')->index();
    $table->integer('booking_version')->index();
    $table->uuid('parent_holiday_item_id')->nullable();

    $table->unique(["id", "booking_id", "booking_version"]);

    $table->foreign('parent_holiday_item_id')->nullable()->references('id')->on('holiday_items')->onDelete('cascade');
    $table->foreign('quotation_id')->references('id')->on('quotations')->onDelete('cascade');

    $table->timestamps();
});

以下是带有unqiue约束的holiday_items表中的字段:

Schema::create('holiday_items', function (Blueprint $table) {
    $table->uuid('id');
    $table->integer('booking_version')->index();
    $table->uuid('booking_id')->index();
    $table->timestamps();

    $table->unique(["id", "booking_id", "booking_version"]);

    $table->foreign(['booking_version', 'booking_id'])->references([
        'booking_version',
        'id'
    ])->on('bookings')->onDelete('cascade');

});

我在holiday_bookings迁移中的外键赋值有什么问题?


共有2个答案

李兴庆
2023-03-14

这是因为您的holiday_items.id列没有唯一约束。

修改如下:

Schema::create('holiday_items', function (Blueprint $table) {
    $table->uuid('id')->unique();
                      ^^^^^^^^^^
    // ..
});
夏英发
2023-03-14

您应该将id列设置为主键,这是该列获得唯一性的地方

在迁移过程中:

 $table->uuid('id');
  $table->primary('id');

并且没有必要将此列设置为迁移中的唯一列

 类似资料:
  • 问题内容: 我有一个表定义: 我正在尝试创建失败的表 错误是: 我不确定如何解决此问题。 问题答案: 我认为您正在寻找两个单独的外键:

  • 我在创建一个包含外键的表时遇到问题,该外键来自另一个包含两个主键的表。 以下是表格: 无法创建表risk_final并给我错误: 错误:没有唯一的约束匹配引用表"names_types"的给定键 我该怎么解决呢?

  • 所以我得到了一个错误,没有唯一的约束匹配我的一个表的给定键。我有两个表:用户和项目,其中我们有一个多对一的关系(一个用户有多个项目)。我用炼金术来做这一切: 要创建表,我在我的应用程序中有以下语句。py': 错误是:没有唯一的约束匹配引用表用户的给定键。 我不确定哪里出错了,因为我在ItemModel中有一个外键与UserModel中的主键匹配。欢迎任何建议/提示! 谢谢

  • 我正在为班级注册建立一个数据库,但我在“注册”表上遇到了问题。我需要将分区中的所有主键传递到注册中,但我还想传递一个附加键(“sectionNumber”)。然而,我不想让“sectionNumber”成为“Sections”主键的一部分,因为我不想将sectionNumber传递到每个我有外键的表中,这些外键来自“Sections”有人对如何解决这个问题有什么建议吗?我一直得到下面的错误。

  • 试图在Postgres 9.1中创建此示例表结构: 运行上述代码会产生一个错误,这对我来说没有意义: 有人能解释为什么会出现这种错误吗?

  • 我试着用这些代码使用postgresql创建表,但人们一直说,并没有唯一的约束匹配引用表的给定键。当我试图创建表、节和评估时,出现了这个消息。 请帮帮我。 )我更改了create语句的顺序,并在表中添加了unique key,但仍然不起作用。