2017-02-13 9 views
0

Sequelize.js One-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'}); 

[Страна] & [City] в БД, так:

- 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 false и попробуйте –

+0

Но, я не хочу, чтобы [Страна] не имеет [Город], будет возвращена в результате. – 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 должен иметь любую City объектов, связанных с результатами.

+0

[Графство] в результатах будет 9, а не 10. – YETI