2017-02-13 74 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