Nodejs 对 sequelize 上的两个表使用 JOIN

tux*_*rld 4 javascript node.js sequelize.js

我正在尝试在 sequelize 上实现这个 mysql 命令,但就我是使用这个库的新手而言,我无法实现

我想做这个 sql 命令:

SELECT * FROM users 
join users_contacts_lists on users_contacts_lists.mobile_number = users.mobile_number 
WHERE users_contacts_lists.user_id = 1
Run Code Online (Sandbox Code Playgroud)

我创建数据库模式的模型:

'use strict';
var config = require('../config');

var User = config.sequelize.define('users', {
    id: {
        type: config.Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    password: {
        type: config.Sequelize.STRING
    },
    username: {
        type: config.Sequelize.STRING
    },
    mobileNumber: {
        type: config.Sequelize.STRING,
        field: 'mobile_number'
    },
    status: {
        type: config.Sequelize.STRING
    },
}, {freezeTableName: true});

var UsersContactsLists = config.sequelize.define('users_contacts_lists', {
    id: {
        type: config.Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    userId: {
        type: config.Sequelize.INTEGER,
        field: 'user_id'
    },
    mobileNumber: {
        type: config.Sequelize.STRING,
        field: 'mobile_number', defaultValue: 0
    }
}, {freezeTableName: true});

UsersContactsLists.belongsTo(ChannelsTypes, {foreignKey: 'user_id'});
User.hasMany(Channels, {foreignKey: 'id'});

User.sync();
UsersContactsLists.sync();

module.exports =
{
    users: User,
    usersContactsLists: UsersContactsLists
};
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?提前致谢

小智 6

您可以在如下关系中定义目标键和外键:

User.belongsTo(UsersContactsLists, {targetKey:'mobileNumber',foreignKey: 'mobileNumber'});
Run Code Online (Sandbox Code Playgroud)

然后你可以使用这个:

User.findAll({
    include: [{
        model: UsersContactsLists,
        where: {
            userId: 1
        }
    }]
})
Run Code Online (Sandbox Code Playgroud)