私はmomentjsとSequelizeゲッター定義を使用して、2つの日付フィールドの日付範囲スラッグを作成するという面白い問題に遭遇しました(3/1/16 - 3/7/16)。このロジックは機能しますが、データベースのレコードを作成し、そのフィールドを埋めることなく結果としてnullのままにすることができます。このような場合、私の記録は(1970年1月1日~1970年1月1日)私の見解で表示されます。私は当初、これはビューテンプレートの設定に問題があると思っていましたが、それはnull値の日付範囲を設定することになりました。結果として、私のゲッター定義でif/elseステートメントを作成することが可能かどうかは、両方のフィールドの値が存在しない場合には基本的には表示されませんか?以下の私のコードはこのワークフローを達成していません。これを行うためのよりよい方法はありますか?ここでSequelizeJS DateフィールドでIf/Elseステートメントを使用するGetterMethods
if (startDate && endDate == null){
return null;
} else {
return momentStartDate + ' - ' + momentEndDate;
}
は私の完全なモデルです:あなたは私の避難所間
dataDateRangeSlug: function() {
if (this.getDataValue('dataDateStart') && this.getDataValue('dataDateEnd')) {
var momentStartDate = moment(this.getDataValue('dataDateStart')).utc().format("MM/DD/YYYY");
var momentEndDate = moment(this.getDataValue('dataDateEnd')).utc().format("MM/DD/YYYY");
return momentStartDate + ' - ' + momentEndDate;
} else {
return null;
}
}
にあなたのdataDateRangeSlug
コードを置き換えたらどう
module.exports = function(sequelize, DataTypes) {
var moment = require('moment');
var Discovery = sequelize.define('discovery', {
discoveryId: {
type: DataTypes.INTEGER,
field: 'discovery_id',
autoIncrement: true,
primaryKey: true
},
dataDateStart: {
type: DataTypes.DATE,
field: 'data_date_start',
allowNull: true,
isDate: true
},
dataDateEnd: {
type: DataTypes.DATE,
field: 'data_date_end',
allowNull: true,
isDate: true
}
},
{
freezeTableName: true,
getterMethods: {
dataDateRangeSlug: function(){
var startDate = new Date(this.getDataValue('dataDateStart'));
var momentStartDate = moment(startDate).utc().format("MM/DD/YYYY");
var endDate = new Date(this.getDataValue('dataDateEnd'));
var momentEndDate = moment(endDate).utc().format("MM/DD/YYYY");
if (startDate && endDate == null){
return null;
} else {
return momentStartDate + ' - ' + momentEndDate;
}
},
dataDateStartSlug: function(){
var startDate = new Date(this.getDataValue('dataDateStart'));
var momentStartDate = moment(startDate).utc().format("YYYY-MM-DD");
return momentStartDate;
},
dataDateEndSlug: function(){
var endDate = new Date(this.getDataValue('dataDateEnd'));
var momentEndDate = moment(endDate).utc().format("YYYY-MM-DD");
return momentEndDate;
},
},
classMethods: {
associate: function(db) {
Discovery.belongsTo(db.User, {foreignKey: 'user_id'}),
Discovery.hasOne(db.DiscoverySource, {foreignKey: 'discovery_source_id'});
}
}
});
return Discovery;
}