gpt4 book ai didi

mysql - 从多对多关系中选择 Sequelize

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:49 25 4
gpt4 key购买 nike

我试图从引用另一个表的表中进行选择。我在餐 table 食品和餐 table 配料之间建立了多对多关系。

食物模型:

module.exports = function(sequelize, DataTypes) {
return sequelize.define('food', {
id: {
type: DataTypes.INTEGER(10),
allowNull: false,
primaryKey: true,
autoIncrement: true
},
name_food: {
type: DataTypes.STRING,
allowNull: false
}
}, {
tableName: 'food',
freezeTableName: true
});
};

食物成分模型:

module.exports = function(sequelize, DataTypes) {
return sequelize.define('food_ingredients', {
id: {
type: DataTypes.INTEGER(10),
allowNull: false,
primaryKey: true,
autoIncrement: true
},
food_id: {
type: DataTypes.INTEGER(10),
allowNull: false,
references: {
model: 'food',
key: 'id'
}
},
ingredient_id: {
type: DataTypes.INTEGER(10),
allowNull: false,
references: {
model: 'ingredients',
key: 'id'
}
}
}, {
tableName: 'food_ingredients',
freezeTableName: true
});
};

成分模型:

module.exports = function(sequelize, DataTypes) {
return sequelize.define('ingredients', {
id: {
type: DataTypes.INTEGER(10),
allowNull: false,
primaryKey: true,
autoIncrement: true
},
name_ingredient: {
type: DataTypes.STRING,
allowNull: false
}
}, {
tableName: 'ingredients',
freezeTableName: true,
timestamps: false
});
};

我的问题是我不知道如何使用 sequelize 在这个表上进行自然连接。我试过这样的事情:

Food.findAll({include: [
{
model: Food_Ingredients
}
]}).then(responseWithResult(res))
.catch(handleError(res));

但是我收到了这个错误:

food_incredients is not associated to food!

那么,我该如何使用 sequelize 查询它呢?

谢谢。

最佳答案

您似乎没有定义食物和配料之间的多对多关联。总之,您需要在模型中添加类似这样的内容:

食物模型:

Food.belongsToMany(Ingredients, { through: Food_ingredients});

成分模型:

Ingredients.belongsToMany(Food, { through: Food_ingredients});

然后,当你要查询时,你不包括“通过”模型,而是关系中的其他模型。在你的情况下:

Food.findAll({include: [
{
model: Ingredients
}]}).then(responseWithResult(res)).catch(handleError(res));

Sequelize 将为您完成连接。请注意,如果您给关系起一个别名,例如:

Food.belongsToMany(Ingredients, {as 'someAlias', through: Food_ingredients});

您需要在您的包含中添加该别名:

Food.findAll({include: [
{
model: Ingredients, as 'someAlias'
}]}).then(responseWithResult(res)).catch(handleError(res));

关于mysql - 从多对多关系中选择 Sequelize ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34463180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com