1. ホーム
  2. mysql

[解決済み] SequelizeのdefaultValueが設定されない

2022-03-04 18:55:28

質問

ここにレシピテーブルの私のモデルがあります。 データベースとしてmysqlを使用し、sequelizeモジュールを使用しています。 もし、title, prep_time, cook_time を空白にすると、allowNull と defaultValue のバリデーションをスキップして、データベースに ''(空白文字列)を入力しようとするようです。 何か間違ったことをしているのでしょうか?

module.exports = function(sequelize, DataTypes) {
    return sequelize.define('recipe', {
        title: {
            type: DataTypes.STRING,
            allowNull: false
        },
        description: {
            type: DataTypes.TEXT
        },
        ingredients: {
            type: DataTypes.TEXT
        },
        instructions: {
            type: DataTypes.TEXT
        },
        yield: {
            type: DataTypes.STRING
        },
        prep_time: {
            type: DataTypes.INTEGER,
            allowNull: false,
            defaultValue: '0'
        },
        cook_time: {
            type: DataTypes.INTEGER,
            allowNull: false,
            defaultValue: '0'
        },
        image: {
            type: DataTypes.STRING
        }
    });
};

解決方法は?

この現象は2つのケースで起こります。1つ目は defaultValueallowNull でテーブルを再同期する必要があります。 sync({force: true) .

2つ目 AllowNulldefaultValue のような属性があれば動作します。 title に、prep_time は提供されません。 create() 例えば create({title:'',prep_time:''}) は空の値を埋めますが、もし create({title:''} の値は prep_time が設定されます。 defaultValue . 同様に title 属性は、バリデーションエラーの原因となります。

しかし、もしあなたが create(req.body) で、ボディにはフィールド titleprep_time .であれば、空の値が入力されます。

これではっきりしたかな :)