Javascript 正在尝试使用joiner表连接Sequelize中的两个数据库表
我正在尝试获取与用户关联的所有商户的查询 共有三个表格:Javascript 正在尝试使用joiner表连接Sequelize中的两个数据库表,javascript,postgresql,typescript,sequelize.js,Javascript,Postgresql,Typescript,Sequelize.js,我正在尝试获取与用户关联的所有商户的查询 共有三个表格: user\u tbl,user\u favorite\u tbl和merchant\u tbl 对于每一个,我都创建了一个Sequelize实例 用户、用户收藏夹和商户 我试图做一个查询,让我,每一个用户,每一个商家通过用户最喜欢的tbl 这是我的密码: public async fetch_user_with_favorite() { let favMerchants = await User.findAll({
user\u tbl
,user\u favorite\u tbl
和merchant\u tbl
对于每一个,我都创建了一个Sequelize实例
用户、用户收藏夹和商户
我试图做一个查询,让我,每一个用户,每一个商家通过用户最喜欢的tbl
这是我的密码:
public async fetch_user_with_favorite() {
let favMerchants = await User.findAll({
attributes: ["given_name", "family_name", "email"],
include: [
{
model: UserFavorite,
attributes: ["merchant_id"],
include: [
{
model: Merchant,
attributes: ["name"]
}
]
}
]
});
return favMerchants;
}
及
但是,当我尝试调用与此代码关联的端点时,出现以下错误:
SequelizeEagerLoadingError: user_favorite_tbl is not associated to user_tbl!
当我尝试添加以下内容时:
User.hasMany(UserFavorite, { foreignKey: "user_id" });
Merchant.hasMany(UserFavorite, { foreignKey: "merchant_id" });
我得到这个错误:
SequelizeEagerLoadingError: merchant_tbl is not associated to user_favorite_tbl!
我到底哪里出错了?您可以定义如下关联- 多对多关系可以使用两个一对多关系实现,如下所示-
User.hasMany(UserFavorite, { foreignKey: 'user_id', targetKey: 'id'});
UserFavorite.hasMany(User,{ foreignKey: 'user_id',targetKey: 'id'});
Merchant.hasMany(UserFavorite, { foreignKey: 'merchant_id', targetKey: 'id'});
UserFavorite.hasMany(Merchant,{ foreignKey: 'merchant_id',targetKey: 'id'});
您的
belongtomany
关联看起来是正确的,但是,当您有belongtomany
时,您的findAll
不应该在include
中有中间表<代码>到在内部处理中间表关联
let favMerchants = await User.findAll({
attributes: ["given_name", "family_name", "email"],
include: [
{
model: Merchant,
attributes: ["name"],
through: { attributes: [] } // if you do not need any metadata in user_favorite_tbl.
}
]
});
附带说明
User.belongtomany(商家,{通过:“User\u favorite\u tbl”})代码>
这个也许更好用
User.belongtomany(商家,{通过:UserFavorite})代码>
let favMerchants = await User.findAll({
attributes: ["given_name", "family_name", "email"],
include: [
{
model: Merchant,
attributes: ["name"],
through: { attributes: [] } // if you do not need any metadata in user_favorite_tbl.
}
]
});