2016-04-07 6 views
1

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

答えて

0

ここ

は、私の場合/他のスニペットです自分でそれを実行しようとしたが、これはあなたが探していると信じている

関連する問題