【问题标题】:Nodejs use JOIN for two tables on sequelizeNodejs 在 sequelize 上对两个表使用 JOIN
【发布时间】:2017-04-05 08:10:04
【问题描述】:

我正在尝试在 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
};

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

【问题讨论】:

    标签: javascript node.js sequelize.js


    【解决方案1】:

    您可以在这样的关系中定义目标键和外键:

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

    然后你可以使用这个:

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

    【讨论】:

    • 谢谢哥们,不幸的是我收到了这个错误TypeError: Cannot read property 'field' of undefined at new BelongsTo (/Volumes/Home/Projects/Web/test/node_modules/sequelize/lib/associations/belongs-to.js:64:66)
    • 谢谢,我如何从UsersUsersContactsLists 模型中选择一些字段?例如id 来自Userupdated_at 来自UsersContactsLists?
    • targetkey指的是目标模型,这里是UsersContactsLists,所以targetKey是updated_at,另一个是当前模型的foriegnKey,这里是id
    • 不是我的意思,创建 join sql 命令并从两个表中选择一些字段
    • User.findAll( { 包括:[ { 模型:UsersContactsLists,其中:{ userId:1 },属性:['updated_at'] }],属性:['id'] })跨度>
    【解决方案2】:

    摆弄了一下,这句话是不是你想要的?

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

    【讨论】:

      猜你喜欢
      • 2021-04-05
      • 2021-03-13
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 1970-01-01
      • 2016-12-02
      • 2014-10-10
      • 1970-01-01
      相关资源
      最近更新 更多