2017-02-13 11 views
0

Sequelize.js 1対多の連想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 

私はクエリをしたいです[国]存在する[都市]、オフセットが&の場合は、そのようなSQLではなくORMを使用します。

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

私はそれを行う方法がわからないのですか?

私は何らかの方法で試しましたが、うまく機能しません。 この方法は正しくありません。実際には[Country-003]ではなく[Country-003]から9が返されますが、制限は正しくありません。手始めに

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

add false falseを試してみてください –

+0

しかし[Country]には[City]は返されません。 – YETI

答えて

0

require: trueを置くことCountryは、それに関連するすべてのCityオブジェクトを持っていない場合、それは、クエリの一部として返されないことを意味します。

また、クエリの構造は、制限しようとしているものによって異なります。あなたが戻ってすべてのCountryオブジェクトを取得したい場合は

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

が、唯一最大10:

あなたがCityオブジェクトの任意の数で、背中全体でわずか10 Countryレコードを取得したい場合は

はそれぞれ関連付けます各一つと関連 Cityオブジェクト:前述したように

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

、あなたもCountryはどんなを持たなければならない制限を解除するrequired: trueをドロップすることができます結果に関連するオブジェクト。

+0

[County]の結果は9でなく10になります。 – YETI