最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

在Sequelize中了解渴望加载的关联问题

运维笔记admin12浏览0评论

在Sequelize中了解渴望加载的关联问题

在Sequelize中了解渴望加载的关联问题

我试图理解,sequelize如何做急切的加载以及为什么它不适合我。

请假设,我通过sequelize migrate命令创建以下表:

用户表:

return queryInterface.createTable('Users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      .... other columns
}

物品表:

return queryInterface.createTable('Items', {
        id: {
            allowNull: false,
            autoIncrement: true,
            primaryKey: true,
            type: Sequelize.INTEGER
        }, 
        insertUserId: {
            allowNull: false,
            type: Sequelize.INTEGER,
            onDelete: 'CASCADE',
            onUpdate: 'CASCADE',
            references: {
                model: 'Users',
                key: 'id',
                as: 'insertUserId'
            }
        },
        ..... some other columns 
}

项目模型(此关联完美运行):

module.exports = (sequelize, DataTypes) => {
  const Item = sequelize.define('Item', {
  .... configuration of columns
  });

  Item.associate = (models) => {
   Item.belongsTo(models.User, {
    as: 'insertUser'
   });
  };

  Item.associate = (models) => {
    Item.belongsTo(models.User, {
      as: 'editUser'
  });

  return Item;
};

用户模型(这对我来说是棘手的部分):

module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define('User', {
    .... configuration of columns
  });

  User.associate = (models) => {
        - TRICKY ASSOCIATION - 
  };

  return User;
};

我的目标:

我想在itemController中获取包含用户的所有项目(可以正常工作),但我也希望获得所有用户并在userController中包含所有相关项目(LEFT JOIN,对吧?)。渴望装载能够做到这一点(我是对的吗?)

想要输出:

{ 
 id: '0',
 name: 'username', 
 insertedItems: [
  { <item_1> },
  { <item_n> }
 ]
}

UserController的

function getUsersItems(year) {
    return User.findAll({
        include: [{
            model: Item,
            as: 'insertedItems'
        }],
        attributes: ['id', 'name']
    });
}

我在用户模型中尝试了以下内容:

User.associate = (models) => {
    User.hasMany(models.Item, {
        as: 'insertedItems',
        foreignKey: 'id'
    });
};

正如我对文档的正确理解,'hasMany'在这里使用是正确的。别名也很重要('insertedItems')。有没有什么,我错过了?

我使用sequelize 4.15.0和nodejs 9.2.0。

感谢你们

回答如下:

我自己找到了解决方案。

因为我有与多个用户关联的项目(insertUser,editUser),我需要指定正确的外键

User.hasMany(models.Item, {
    as: 'items',
    foreignKey: 'insertUserId'
});
发布评论

评论列表(0)

  1. 暂无评论