需要帮助设置节点/Knex 的迁移
Need help setting up migration for node / Knex
我刚刚使用 knex.js 创建了一个节点应用程序,我需要有关如何基于此 sql 转储创建迁移的帮助。如果有人可以帮助我有 Knex 的经验,我会很高兴。
我不要求全部,我只需要一些关于如何开始的帮助。我在 javascript 方面仍然很糟糕,我感到被卡住了:(
--
-- Table structure for table `role`
--
DROP TABLE IF EXISTS `role`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`authority` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `authority` (`authority`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `role`
--
LOCK TABLES `role` WRITE;
/*!40000 ALTER TABLE `role` DISABLE KEYS */;
INSERT INTO `role` VALUES (1,'ROLE_ADMIN'),(2,'ROLE_USER');
/*!40000 ALTER TABLE `role` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `user`
--
DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`password` varchar(255) NOT NULL,
`username` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `user`
--
LOCK TABLES `user` WRITE;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES (1,'a$BCYu4wAXWMDXpjnqb9PdSeNi2lUtqRCHvUYv6oWxaOKjEgiJN4Sz2','Admin'),(2,'a$Pv8Y8BDxeiSbg6yb/CMdrOD0z2Z3FZb3R/DfwW2zGXIEFvAbyQp7y','Rob7');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `user_role`
--
DROP TABLE IF EXISTS `user_role`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `user_role` (
`role_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`role_id`,`user_id`),
KEY `role_id` (`role_id`),
KEY `user_id` (`user_id`),
CONSTRAINT `user_role_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
CONSTRAINT `user_role_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `user_role`
--
LOCK TABLES `user_role` WRITE;
/*!40000 ALTER TABLE `user_role` DISABLE KEYS */;
INSERT INTO `user_role` VALUES (1,1),(2,2);
/*!40000 ALTER TABLE `user_role` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2016-03-08 12:00:23
我是这样开始的:
exports.up = function(knex, Promise) {
return Promise.all([
knex.schema.createTable('role', function(table){
table.string('username');
table.string('password');
table.timestamps();
}),
knex.schema.createTable('user', function(table){
table.string('username');
table.string('password');
table.timestamps();
}),
knex.schema.createTable('user_role', function(table){
table.string('username');
table.string('password');
table.timestamps();
})
])
};
好了,那我们先来看看table这个角色。我们拥有的第一件事是一个自动递增的主键 'id'。所以,对应的 knex 线是这样的:
t.increments('id').primary().unsigned();
那么,我们就有权限了。这是一个唯一的 varchar,它对应于一个 knex 字符串。等效的行是这样的:
t.string('authority', 255).unique();
好的,现在轮到用户了table。我们和以前一样有一个主要的、唯一的、自动递增的 ID,所以我们可以从上面复制和粘贴 ID 行。然后,我们有用户名和密码字段,它们是 NOTNULL varchars max 255,并且用户名是唯一的。我们可以使用以下 knex 行表示:
t.string('username', 255).notNull().unique();
t.string('password', 255).notNull();
现在,我们只需要为 user_role table 做我们的台词。首先,我们需要像以前一样添加一个 ID 列。然后,我们可以像这样添加外键列:
table.integer('user_id').unsigned().references('user.id');
table.integer('role_id').unsigned().references('role.id');
当我们把它们放在一起时,我们会得到这个:
exports.up = function(knex, Promise) {
return knex.schema.createTable('role', function(table){
table.increments('id').primary().unsigned();
table.string('authority', 255).unique();
table.timestamps();
}).createTable('user', function(table){
table.increments('id').primary().unsigned();
table.string('username', 255).notNull().unique();
table.string('password', 255).notNull();
table.timestamps();
}).createTable('user_role', function(table){
table.increments('id').unsigned().primary();
table.integer('user_id').unsigned().references('user.id');
table.integer('role_id').unsigned().references('role.id');
table.timestamps();
})
])
};
以上代码将创建所有 table、列等,但不会插入值。我们需要为此创建一个种子文件。我们可以创建一个种子文件来插入值,它看起来像这样:
exports.seed = function(knex, Promise) {
// Deletes ALL existing entries
return knex('users').del()
.then(function () {
// Inserts seed entries
return knex('users').insert([
{
id: 1,
username: "Admin",
password: "a$BCYu4wAXWMDXpjnqb9PdSeNi2lUtqRCHvUYv6oWxaOKjEgiJN4Sz2"
},
{
id: 2,
username: "Rob7",
password: "a$Pv8Y8BDxeiSbg6yb/CMdrOD0z2Z3FZb3R/DfwW2zGXIEFvAbyQp7y"
}
]);
});
};
您需要按照上述格式为每个 table 创建一个新的种子文件。我相信这个答案应该涵盖所有内容,但如果您有任何问题,请告诉我!
回滚
要回滚,我们需要在迁移中添加一个 exports.down 方法。它应该是这样的:
exports.down = function(knex, Promise) {
return Promise.all([
knex.schema.dropTable("role");
knex.schema.dropTable("user");
knex.schema.dropTable("user_role");
]);
};
我刚刚使用 knex.js 创建了一个节点应用程序,我需要有关如何基于此 sql 转储创建迁移的帮助。如果有人可以帮助我有 Knex 的经验,我会很高兴。
我不要求全部,我只需要一些关于如何开始的帮助。我在 javascript 方面仍然很糟糕,我感到被卡住了:(
--
-- Table structure for table `role`
--
DROP TABLE IF EXISTS `role`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`authority` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `authority` (`authority`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `role`
--
LOCK TABLES `role` WRITE;
/*!40000 ALTER TABLE `role` DISABLE KEYS */;
INSERT INTO `role` VALUES (1,'ROLE_ADMIN'),(2,'ROLE_USER');
/*!40000 ALTER TABLE `role` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `user`
--
DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`password` varchar(255) NOT NULL,
`username` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `user`
--
LOCK TABLES `user` WRITE;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES (1,'a$BCYu4wAXWMDXpjnqb9PdSeNi2lUtqRCHvUYv6oWxaOKjEgiJN4Sz2','Admin'),(2,'a$Pv8Y8BDxeiSbg6yb/CMdrOD0z2Z3FZb3R/DfwW2zGXIEFvAbyQp7y','Rob7');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `user_role`
--
DROP TABLE IF EXISTS `user_role`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `user_role` (
`role_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`role_id`,`user_id`),
KEY `role_id` (`role_id`),
KEY `user_id` (`user_id`),
CONSTRAINT `user_role_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
CONSTRAINT `user_role_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `user_role`
--
LOCK TABLES `user_role` WRITE;
/*!40000 ALTER TABLE `user_role` DISABLE KEYS */;
INSERT INTO `user_role` VALUES (1,1),(2,2);
/*!40000 ALTER TABLE `user_role` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2016-03-08 12:00:23
我是这样开始的:
exports.up = function(knex, Promise) {
return Promise.all([
knex.schema.createTable('role', function(table){
table.string('username');
table.string('password');
table.timestamps();
}),
knex.schema.createTable('user', function(table){
table.string('username');
table.string('password');
table.timestamps();
}),
knex.schema.createTable('user_role', function(table){
table.string('username');
table.string('password');
table.timestamps();
})
])
};
好了,那我们先来看看table这个角色。我们拥有的第一件事是一个自动递增的主键 'id'。所以,对应的 knex 线是这样的:
t.increments('id').primary().unsigned();
那么,我们就有权限了。这是一个唯一的 varchar,它对应于一个 knex 字符串。等效的行是这样的:
t.string('authority', 255).unique();
好的,现在轮到用户了table。我们和以前一样有一个主要的、唯一的、自动递增的 ID,所以我们可以从上面复制和粘贴 ID 行。然后,我们有用户名和密码字段,它们是 NOTNULL varchars max 255,并且用户名是唯一的。我们可以使用以下 knex 行表示:
t.string('username', 255).notNull().unique();
t.string('password', 255).notNull();
现在,我们只需要为 user_role table 做我们的台词。首先,我们需要像以前一样添加一个 ID 列。然后,我们可以像这样添加外键列:
table.integer('user_id').unsigned().references('user.id');
table.integer('role_id').unsigned().references('role.id');
当我们把它们放在一起时,我们会得到这个:
exports.up = function(knex, Promise) {
return knex.schema.createTable('role', function(table){
table.increments('id').primary().unsigned();
table.string('authority', 255).unique();
table.timestamps();
}).createTable('user', function(table){
table.increments('id').primary().unsigned();
table.string('username', 255).notNull().unique();
table.string('password', 255).notNull();
table.timestamps();
}).createTable('user_role', function(table){
table.increments('id').unsigned().primary();
table.integer('user_id').unsigned().references('user.id');
table.integer('role_id').unsigned().references('role.id');
table.timestamps();
})
])
};
以上代码将创建所有 table、列等,但不会插入值。我们需要为此创建一个种子文件。我们可以创建一个种子文件来插入值,它看起来像这样:
exports.seed = function(knex, Promise) {
// Deletes ALL existing entries
return knex('users').del()
.then(function () {
// Inserts seed entries
return knex('users').insert([
{
id: 1,
username: "Admin",
password: "a$BCYu4wAXWMDXpjnqb9PdSeNi2lUtqRCHvUYv6oWxaOKjEgiJN4Sz2"
},
{
id: 2,
username: "Rob7",
password: "a$Pv8Y8BDxeiSbg6yb/CMdrOD0z2Z3FZb3R/DfwW2zGXIEFvAbyQp7y"
}
]);
});
};
您需要按照上述格式为每个 table 创建一个新的种子文件。我相信这个答案应该涵盖所有内容,但如果您有任何问题,请告诉我!
回滚
要回滚,我们需要在迁移中添加一个 exports.down 方法。它应该是这样的:
exports.down = function(knex, Promise) {
return Promise.all([
knex.schema.dropTable("role");
knex.schema.dropTable("user");
knex.schema.dropTable("user_role");
]);
};