gpt4 book ai didi

mysql - 具有唯一约束功能的 Knex.js 迁移

转载 作者:行者123 更新时间:2023-11-29 02:13:17 24 4
gpt4 key购买 nike

我目前正在尝试将一个新表迁移到我的数据库中。该表是用户表。这是我的代码:

exports.up = function(knex, Promise) {
return knex.schema.createTableIfNotExists('users', function(table) {
table.increments('id').primary();
table.string('first_name').notNullable();
table.string('last_name').notNullable();
table.string('email').unique().notNullable();
table.string('password').notNullable();
table.timestamps(false, true);
}).then(() => {
console.log('Users Table is Created!');
})
};

exports.down = function(knex, Promies) {
return knex.schema.dropTable('users')
.then(() => {
console.log('Users Table has been Dropped!');
})
};

这会返回两个错误:

Knex:警告 - 迁移失败并出现错误:alter tableusersadd uniqueusers_email_unique(email) - 键列“email”在表中不存在

错误:表中不存在键列“email”

看起来 unique() 试图做的是在我试图创建的表上预先形成一个 alter table。因此,电子邮件列不存在的错误。我在这里做错了什么,或者您可以在创建表时不对列执行 unique() 函数吗?我在文档的 createTable 中看到了使用 unique() 函数的示例。所以我不知道为什么这会响应所述错误。

我的数据库正在创建中,我可以看到它。看起来 unique() 约束并未应用于也未创建的电子邮件列。

最佳答案

knex.schema.createTableIfNotExists('users', function(table) {
table.increments('id').primary();
table.string('first_name').notNullable();
table.string('last_name').notNullable();
table.string('email').unique().notNullable();
table.string('password').notNullable();
table.timestamps(false, true);
}).toSQL().forEach(query => console.log(query.sql))

创建以下 SQL

create table if not exists "users" ("id" serial primary key, "first_name" varchar(255) not null, "last_name" varchar(255) not null, "email" varchar(255) not null, "password" varchar(255) not null, "created_at" timestamptz not null default CURRENT_TIMESTAMP, "updated_at" timestamptz not null default CURRENT_TIMESTAMP);
alter table "users" add constraint "users_email_unique" unique ("email");

因此,如果表已经具有该名称的约束,则创建查询的约束将失败。但是您的错误似乎确实涉及其他一些奇怪的情况。

关于mysql - 具有唯一约束功能的 Knex.js 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45806784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com