Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在尝试使用joiner表连接Sequelize中的两个数据库表_Javascript_Postgresql_Typescript_Sequelize.js - Fatal编程技术网

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.
        }
    ]
});