2016-08-08 32 views
1

Ich habe folgende Modelle:Sequelize Abfrage mit dem Inneren umfassen

'use strict'; 

module.exports = function(sequelize, DataTypes) { 
    var Collection = sequelize.define("Collection", { 
     name: DataTypes.STRING, 
     customer: DataTypes.STRING 
    }, { 
     classMethods: { 
      associate: function(models) { 
       Collection.hasMany(models.Items); 
      } 
     } 
    }); 

    return Collection; 
}; 


'use strict'; 

module.exports = function(sequelize, DataTypes) { 
    var Item = sequelize.define("Item", { 
     itemId: { 
      type: DataTypes.STRING, 
      primaryKey: true 
     } 
    }, { 
     classMethods: { 
      associate: function(models) { 
       Item.belongsToMany(models.Collection); 
      } 
     } 
    }); 

    return Item; 
}; 

Können sagen, ich alle Sammlungen und ihre Produkte mit bestimmten Kunden und eines der Elemente erhalten möchten enthält die itemId. Meine Frage lautet wie folgt:

models.Collection.findAll({ 
    where: { 
     customer: customerParam 
    }, 
    include: [{ 
     model: models.Item, 
     where: { 
      itemId: itemParam 
     } 
    }] 
}).then(function(collections) { 
    console.log(collections); 
}) 

Das Problem ist, dass diese Abfrage, um die Gegenstände aus den Sammlungen Filter, die ich habe und jetzt nur sie die Elemente enthalten, die mit dem gleichen itemId sind stattdessen alle Elemente des zu enthalten, Sammlung.

Antwort

0

Sie erhalten dieses Ergebnis, weil die where-Anweisungen in Ihrer Abfrage wie Unterabfragen separat ausgeführt werden. So , wenn Sie generieren möchten, wo Klausel wie es WHERE Collection.customer = 'blabla' AND Item.itemId = 1 Sie folgendes tun:

models.Collection.findAll({ 
    where: { 
     customer: customerParam, 
     '$items.itemId$': itemParam 
    }, 
    include: [{ 
     model: models.Item, 
     as: 'items' 
    }] 
}) 
+1

Es jetzt wirft die folgende Ausnahme, wenn ich die Abfrage aktivieren: Unhandle Ablehnung Fehler: Artikel (Artikel) nicht zugeordnet zur Sammlung! –