2017-02-13 101 views
0

Sequelize.js 一to-many关联sequelize(关系/协会)子查询

var City = sequelize.define('city', { countryCode: Sequelize.STRING }); 
var Country = sequelize.define('country', { isoCode: Sequelize.STRING }); 

// Here we can connect countries and cities base on country code 
Country.hasMany(City, {foreignKey: 'countryCode', sourceKey: 'isoCode'}); 
City.belongsTo(Country, {foreignKey: 'countryCode', targetKey: 'isoCode'}); 

[国家] & [市]在DB,这样的:

- Country-001 
    * City-001-1 
    * City-001-2 
    * City-001-3 
- Country-002 
    * City-002-1 
    * City-002-2 
    * City-002-3 
- Country-003 
    no city 
- Country-004 
    * City-004-1 
    * City-004-2 
    * City-004-3 
... 
- Country-100 
    * City-100-1 
    * City-100-2 
    * City-100-3 

我想查询[国家]存在[城市],用偏移量&限制,使用ORM,而不是sql,如下所示:

Country.findAll({ 
    where: {}, 
    include: [], 
    offset: 0, 
    limit: 10 
}); 

我不知道该怎么做?

我尝试了一些方法,他们不太好。 这种方式是不正确的,它会返回9 [国家]不是10,[国家003]真的不在结果中,但限制是不正确的。

Country.findAll({ 
    where: {}, 
    include: [mode: City, require: true], 
    offset: 0, 
    limit: 10 
}); 
+0

add require false and try –

+0

但是,我不希望[Country]没有[City]返回结果。 – YETI

回答

0

对于初学者来说,把require: true意味着如果Country没有任何与之相关的City对象,那么它不会被作为查询的一部分返回。

另外,查询的结构取决于您要限制的内容。

如果你想找回只有10 Country共记录,与任意数量的City对象的关联与每一个:

Country.findAll({ 
    include: [{ 
    model: City, 
    require: true, 
    }], 
    limit: 10 
}); 

如果你想找回所有Country对象,但仅达10与之关联City对象:

Country.findAll({ 
    include: [{ 
    model: City, 
    require: true, 
    limit: 10 
    }], 
}); 

正如前面提到的,你也可以降required: true解除一个Country必须有任何限制与结果相关联的对象。

+0

[县]结果将是9,而不是10。 – YETI