Nodejs在sequelize上对两个表使用JOIN

时间:2016-11-21 20:11:03

标签: 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

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

'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
};

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

2 个答案:

答案 0 :(得分:4)

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

User.belongsTo(UsersContactsLists, {targetKey:'mobileNumber',foreignKey: 'mobileNumber'});

然后你可以使用它:

User.findAll({
include: [{
    model: UsersContactsLists,
    where: {
        userId: 1
    }
}]

答案 1 :(得分:2)

摆弄一下,这句话是否符合你的要求?

User.findAll({
    include: [{
        model: UsersContactsLists,
        where: {
            userId: 1
        }
    }]
相关问题