SequelizeJS 使用 If/Else 语句和日期字段 GetterMethods
SequelizeJS Using If/Else Statements with Date Field GetterMethods
我有一个 运行 进入一个有趣的问题,我正在使用 momentjs 和 Sequelize getter 定义为我的两个日期字段(例如 3/1/16 - 3/7/16)。这个逻辑有效,但我有这样的例子,在没有填写这些字段的情况下可以在我的数据库中创建记录,结果保留为空。在这些情况下,我的记录在我的视图中显示为 (1/1/1970 - 1/1/1970)。我最初认为这是我的视图模板设置的问题,但后来意识到这是 momentjs 为空值填充日期范围。因此,我想知道是否可以使用我的 getter 定义创建一个 if/else 语句,以便在两个字段的值都不存在时基本上不出现。我下面的代码没有实现这个工作流程。有更好的方法吗?
这是我的 if/else 片段:
if (startDate && endDate == null){
return null;
} else {
return momentStartDate + ' - ' + momentEndDate;
}
这是我的完整模型:
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;
}
如果将 dataDateRangeSlug
代码替换为
会怎么样
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;
}
}
虽然我自己还没有尝试过 运行,但我相信这就是您要找的东西
我有一个 运行 进入一个有趣的问题,我正在使用 momentjs 和 Sequelize getter 定义为我的两个日期字段(例如 3/1/16 - 3/7/16)。这个逻辑有效,但我有这样的例子,在没有填写这些字段的情况下可以在我的数据库中创建记录,结果保留为空。在这些情况下,我的记录在我的视图中显示为 (1/1/1970 - 1/1/1970)。我最初认为这是我的视图模板设置的问题,但后来意识到这是 momentjs 为空值填充日期范围。因此,我想知道是否可以使用我的 getter 定义创建一个 if/else 语句,以便在两个字段的值都不存在时基本上不出现。我下面的代码没有实现这个工作流程。有更好的方法吗?
这是我的 if/else 片段:
if (startDate && endDate == null){
return null;
} else {
return momentStartDate + ' - ' + momentEndDate;
}
这是我的完整模型:
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;
}
如果将 dataDateRangeSlug
代码替换为
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;
}
}
虽然我自己还没有尝试过 运行,但我相信这就是您要找的东西