2016-05-23 8 views
0

sequalizeを作る方法日付を増やした同じレコードのx numberをバルク作成する?私はこのような単純なモデルのためのインクリメンタル日のx個のレコードのx数を作成しようとしてい

module.exports = function(sequalize, DataTypes){ 
var Availability = sequalize.define('availability', { 
    id: { 
     type: DataTypes.INTEGER, 
     primaryKey: true, 
     autoIncrement: true 
    }, 
    date: { 
     type: DataTypes.DATE, 
     allowNull: false 
    }, 
    reserved: { 
     type:DataTypes.BOOLEAN, 
     defaultValue: false 
    } 
    }); 
    return Availability; 

} 

は、任意のスマートバルクは私がのためにオブジェクトを作成せずに使用することができる方法を作成ありますループ?

+0

実際のデータをどのように見せたいかの例を挙げることはできますか?データベースを切り替えることを犠牲にすることなく、異なる日付のレコードを作成することができます。これは 'generate_series'を使うのと同じくらい簡単かもしれませんが、あなたのORM定義から伝えるのは難しいです。 – jmelesky

+0

データは次のようなものになります:1 2016/06/01T00:00 false、2 2016/06/02 false、3 2016/06/03 ....基本的に日付増分のレコード数。 – iMad

+0

なぜこのタグ付きpostgresqlはありますか? – Jasen

答えて

1

SQLを直接使用できる場合は、これを行うための比較的簡単な方法があります。 generate_series関数は、一連のデータを含む1列のテーブルを返します。

INSERT INTO availability 
    (date) 
SELECT * 
    FROM generate_series('2016-06-01'::date, 
         '2016-08-01'::date, 
         '1 day'); 

詳細はthe documentationを参照してください。ただSequelizeとJavaScriptを使用してPostgeSQL特定の機能を使用せずに

+0

これはPostgreSQLでのみサポートされていますので、この方法を使用する場合は、ORMを使用していると考えると、私は素晴らしい解決策を見つけることができないPostgreSQLに悩まされます。データベース間の互換性。 – leroydev

1

実装は、日付:

(私が知っている、これはforループでオブジェクトを構築して行われているが、これは単に方法を探し、他の人のために面白いかもしれません

//This will create 5 dates, each with 1 day inbetween, starting from today: 
var today = new Date(); 
var dates = []; 
dates.push(today); 
for (var i = 0; i < 5; i++) { 
    //TODO: change each element of 'dates' to be an object, add the remaining 
    //attributes of 'Availability' with a date to each of this objects 
    var nextDay = new Date(dates[i].getTime()); 
    nextDay.setDate(dates[i].getDate() + 1); 
    dates.push(nextDay); 
} 
//'dates' will contain 5 dates now. 
//TODO: handle '.then' and '.catch' 
Availability.bulkCreate(dates); 
関連する問題