2017-04-25 2 views
2

ich nicht die beste Diagramme in UML/Datenbank bin aber hoffentlich zeigt das folgende mein DB-Design (MsSQL)Wo auf hasMany in sequelize mit Graf

enter image description here

ich mit Null eine „Location“ Tabelle müssen viele Paletten sind damit verbunden (es gibt 0-viele Paletten an einem Ort). Dieser Ort kann jedoch einer von zwei Typen sein, der Ort x oder y. Dieses Diagramm vereinfacht es, aber es gibt viele verschiedene Arten von Orten und sehr unterschiedliche Felder für jeden Typ.

Ich benutze Sequelize als ORM und versuche herauszufinden, wie man eine bestimmte Abfrage durchführt. Ich denke, ich bin nah, aber ziemlich fest.

Was ich brauche, ist:

eine einzige LocationTypeX auswählen, wo „aktiv“ wahr ist, und wo sein entsprechender Standort weniger als 10 Paletten in ihm.

Zuvor war ich weg und habe alle LocationTypeX, wo "aktiv" wahr ist. Enthaltener Standort und Palette (vor Ort) und alles in Code, um herauszufinden, welcher Standort relavent ist. Aber das dauert ewig, denn es gibt Tausende von Standorten und jede Menge Paletten, die durch sie verteilt sind.

Alles, was ich bin, ist, den Standortnamen anzuzeigen. Das ist es. Aber der Name des Ortes, der der obigen Bedingung entspricht. Hoffentlich kann jemand helfen?

Bisher habe ich

models.Location.findAll({ 
    group: ['Location.id', 'Pallets.id'], 
    attributes: ['Location.id', 'Pallets.id', [models.sequelize.fn('COUNT',models.sequelize.col('Pallets.id')), 'PalletCount']], 
    include: [{ 
    model: models.Pallet, 
    attributes: [] 
    }] 
}).then((ret)=> { 
    console.log(ret); 
}); 

Aber die "aktive" Check nicht tun. Und auch nicht die Where-Klausel über die Menge der Paletten. Zurück zum Quadrat

+0

Run SQL Profiler in Sequelize zu tun und eigentliche Abfrage –

+0

@MikhailLobanov überprüfen, warum? Die Abfrage, die ich im Moment habe, ist immer noch weit entfernt – MichaelMcCabe

+0

Sorry, mein Englisch ist nicht exzellent. Was bedeutet "weit weg"? Es gibt keine SQL-Abfrage, wenn Sie den Befehl 'models.Location.findAll ({'? –

Antwort

0

Ich habe es geschafft, meine eigene Frage mit roher SQL zu beantworten, die ich in Sequelize verwenden kann. Allerdings würde ich immer noch daran interessiert zu wissen, wie es

models.sequelize.query(
    `SELECT TOP 1 Locations.id, Locations.name FROM LocationTypeX 
    INNER JOIN Locations ON LocationTypeX.LocationId = Locations.id 
    LEFT JOIN Pallets on (Locations.id = Pallets.LocationId) 
    WHERE LocationTypeX.active = 1 
    GROUP BY Locations.id, Locations.name 
    HAVING COUNT(Pallets.id) < 3` 
, { type: models.sequelize.QueryTypes.SELECT})