2016-04-07 13 views
1

İki tarih alanım için bir tarih aralığı sümüğü oluşturmak için momentleri ve Sequelize alıcı tanımını kullandığım ilginç bir soruna rastlıyorum (örneğin 3/1/16 - 3/7/16). Bu mantık işe yarıyor, ancak veritabanımdaki bir kaydın doldurulup doldurulmadığı ve null olarak bırakıldığı durumlar var. Bu örneklerde, kayıtlarım (1/1/1970 - 1/1/1970) ile görüşüme göre görüntülenir. Öncelikle bu durumun görünüm şablonu kurulumumla ilgili bir sorun olduğunu düşündüm, ancak daha sonra boş değerler için bir tarih aralığını dolduran momentlerin olduğunu fark ettim. Sonuç olarak, her iki alan için bir değer yoksa, getter tanımımla bir if/else ifadesi oluşturmanın mümkün olup olmadığını merak ediyordum. Aşağıdaki kodum bu iş akışına ulaşmıyor. Bunu yapmanın daha iyi bir yolu var mı? EğerSequelizeJS Tarih Alanında If/Else İfadelerini Kullanmak GetterMethods

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; 
    } 
} 

iken ben sığınak içine dataDateRangeSlug kodunu değiştirmek durumunda

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; 
} 

cevap

0

Ne:

İşte
if (startDate && endDate == null){ 
    return null; 
} else { 
    return momentStartDate + ' - ' + momentEndDate; 
} 

benim tam modelidir: Burada

benim if/else pasajıdır Kendimi çalıştırmayı denemedim, aradığın şeyin bu olduğuna inanıyorum