2016-05-23 6 views
0

Ich versuche x Anzahl der Datensätze für x Anzahl der inkrementellen Tage für ein einfaches Modell wie folgt zu erstellen:Wie man eine Massenbildung vornehmen lässt x die Nummer des gleichen Datensatzes mit nur inkrementierten Daten erstellen?

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; 

} 

Gibt es eine intelligente Bulk-create-Methode, die ich ohne den Bau des Objekts mit einer Verwendung für Schleife?

+0

Können Sie ein Beispiel dafür angeben, wie die tatsächlichen Daten aussehen sollen? Dies kann so einfach sein wie die Verwendung von 'generate_series', aber es ist schwierig, dies anhand Ihrer ORM-Definition zu erkennen. – jmelesky

+0

die Daten wären etwa wie folgt: 1 2016/06/01T00: 00 false, 2 2016/06/02 false, 3 2016/06/03 .... im Grunde ein Bündel von Datensätzen mit Datumsinkrementen. – iMad

+0

Warum ist dieses PostgreSQL markiert? – Jasen

Antwort

1

Wenn Sie SQL direkt verwenden können, gibt es eine relativ einfache Möglichkeit, dies zu tun. Die Funktion generate_series gibt eine einspaltige Tabelle mit einer Reihe von Daten zurück.

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

Weitere Details finden Sie unter the documentation.

+0

Dies wird jedoch nur in PostgreSQL unterstützt. Wenn Sie diese Methode verwenden würden, wären Sie mit PostgreSQL beschäftigt, was ich nicht für eine gute Lösung halte, wenn wir einen ORM verwenden, von dem einer der Vorteile ist datenbankübergreifende Kompatibilität – leroydev

1

Implementierung ohne PostgeSQL spezifische Funktionen zu verwenden, mit nur Sequelize und JavaScript Termine:

(Ich weiß, das mit der Konstruktion von Objekten mit einem for-Schleife durchgeführt wird, aber dies könnte für andere Leute interessant sein, nur nach einem Weg um Datensätze mit unterschiedlichen Daten zu erstellen, ohne dabei die Datenbanken wechseln zu müssen)

//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);