mysql - Sequelize UUID with mySQL: Unable to set default value
问题描述
我一直在尝试将我的用户表的 id(主键)设置为 UUID。但是,当我尝试播种时,我不断收到此错误:字段“id”没有默认值。
这是我迄今为止在我的用户模型中所拥有的:
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Users extends Model {};
Users.init({
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
allowNull: false,
primaryKey: true
},
user_name: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notNull: {
msg: 'Please add a name',
},
},
},
{
sequelize,
modelName: 'Users',
});
return Users;
同样,这就是我的用户迁移文件中的内容:
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('Admins', {
id: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4,
allowNull: false,
primaryKey: true
},
user_name: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('Users');
}
};
我对 Sequelize 还很陌生,所以希望能得到一些关于出了什么问题的指导!
解决方案
所以,我想我意识到了这个问题:
出于某种原因,使用播种器文件播种它不会自动生成我认为会自动生成的字段,因此我不得不手动将其放入。
'use strict';
const { v4: uuidv4 } = require('uuid');
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.bulkInsert('Users', [{
id: uuidv4(),
user_name: 'John Doe',
"createdAt": new Date(),
"updatedAt": new Date()
}], {});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.bulkDelete('Users', null, {});
}
};
最初,我一直试图在没有 id: uuidv4() 和 new Date() 的情况下播种(运行命令 npx sequelize-cli db:seed:all),这就是它不起作用的原因。
推荐阅读
- excel - 图表数据系列格式不正确
- react-native - 如何在本机反应中创建表格
- r - 截断和合并两个字符向量中的值
- c# - 读取流直到行到达某个字符
- java - 流口水并通过 xpath 获取文本
- php - 如何扩展jwt时间?Jwt 版本:“tymon/jwt-auth”:“^1.0.0-rc.2”Laravel 5.7
- javascript - 如何在 ReactJS 中关闭当前浏览器选项卡?
- java - 用一次性代码交换刷新令牌时的 Google OAuth redirect_uri_mismatch
- rx-java - CompositeDisposable.dispose() 导致 NPE
- php - 使用简码在侧边栏中获取 Woocommerce 自定义分类法