Допустим, у меня есть следующие модели:
const Item = sequelize.define("Item", {
active: { type: DataTypes.BOOLEAN, defaultValue: true },
name: { type: DataTypes.STRING, allowNull: false },
description: { type: DataTypes.TEXT }
});
const Partner = sequelize.define("Partner", {
active: { type: DataTypes.BOOLEAN, defaultValue: true },
name: { type: DataTypes.STRING, allowNull: false },
});
Я связываю их следующим образом:
models.Item.belongsToMany(models.Partner, {
as: "vendors",
through: "PartnerDefaultItems"
});
models.Partner.belongsToMany(models.Item, {
as: "items",
through: "PartnerDefaultItem"
});
Я думаю, мои модели и ассоциации в порядке, потому что это создаст новуютаблица в базе данных с идентификаторами товара и партнера.
Сейчас!Я делаю пагинацию на стороне сервера с фильтрацией, и когда я выбираю партнера (или больше), я хочу вернуть только те элементы, которые связаны с выбранными партнерами.
Могу ли я сделать это только с одним запросом?
Например: мой веб-интерфейс отправляет запрос с partnerId: 1 ...
const res = await db.models.Item.findAll({
where: {select every item with associated partnerId}
});
// - пример связанной таблицы - //
partner_id: 1 item_id: 1 => partner.partnerId совпадает с partner_id, поэтому выберите элемент, где item.id = item_id
partner_id: 2 item_id: 2 => partner.partnerId не равно, не выбирайте
и т. Д....
Смысл в том, чтобы использовать один запрос для этого, без каких-либо необработанных sql.