私は主キーをuuidとして、Sequalizeの実装モデルの問題に直面しています。私はすべての指示を段階的に実行しますが、それでも解決できません。
これは私のモデルがどのように見えるかです:
'use strict';
module.exports = (sequelize, DataTypes) => {
var Todo = sequelize.define('Todo', {
title: DataTypes.STRING,
description: DataTypes.STRING,
test: DataTypes.UUID
}, {});
Todo.associate = function(models) {
// associations can be defined here
};
return Todo;
};
そして移行ファイル:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Todos', {
id: {
primaryKey: true,
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV1
},
title: {
type: Sequelize.STRING
},
description: {
type: Sequelize.STRING
},
test: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Todos');
}
};
要素を作成するためにpostメソッドを呼び出した後、ID列に空の値があり、テスト列にNULLがあります...
日付ベースはMySqlです。
それを行う他の方法はありますか?
1)Sequelizeでカスタムキーを設定する
私は主キーをuuidとしてSequalizeの実装モデルの問題に直面しています。
デフォルトでは、モデルしないにprimaryKey: true
のキーが含まれる場合、sequelize
はINTEGER
という名前のid
という名前のPKを想定します。
あなたの場合、あなた自身のカスタムPKを作成したいようです。
次のモデル内を使用します。
var Todo = sequelize.define('Todo', {
id: {
primaryKey: true,
type: DataTypes.UUID
}
// rest of properties
});
2)検証
Postメソッドを呼び出して要素を作成した後、ID列に空の値があり、テスト列にNULLがあります...
クエリだけでなく、データベースのシード方法に関する多くの情報がなければ、具体的に答えることは困難です。
ただし、検証をリストしていないので、test
列がnull
だったとしても驚きません。したがって、test
値を設定しない行をシードまたは作成すると、null
になります。
検証を作成するには、次の手順を実行します
モデル:
var Todo = sequelize.define('Todo', {
// rest of properties
test: {
allowNull: false
type: DataTypes.UUID,
validate: {
notNull: true
}
}
});
移行:
queryInterface.createTable('Todos', {
// rest of properties
test: {
allowNull: false,
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4
}
});
3)モデルと移行の同期を保つ
(参照: https://stackoverflow.com/a/49796801/8954866 )sequelize
では、モデルと移行は、最初にを使用して生成された場合を除き、互いに自動的に同期しませんsequelize-cli model:generate
。移行を実行したのか、モデルに対する単体テストでクエリを実行していたのかはわかりません。ただし、それらが同期していることを確認する必要があります。主な例は、上記の場合、移行でid
はUUID
タイプであると示されていますが、モデルはINTEGER
タイプであると見なします。
参照