与 sequelize 的一对多关系

one-to-many relationship with sequelize

我有 2 个表,用户和 users_signature 其中签名需要几个应用程序,我需要根据应用程序制作一个 select。

型号:

用户

const { INTEGER } = require('sequelize');
const Sequelize = require('sequelize');
const database = require('../../config/db');
const User_has_signature = require('./user_has_signature');
 
const Usuario = database.define('usuario', {
    usu_id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        allowNull: false,
        primaryKey: true
    },
    usu_rg: {
        type: Sequelize.STRING,
    },
},
{
    freezeTableName: true,
    createdAt: false,
    updatedAt: false,
});
User.hasMany(User_has_signature, {as: 'user_has_signature'});

module.exports = User;

User_has_signature

const { INTEGER } = require('sequelize');
const Sequelize = require('sequelize');
const database = require('../../config/db');
 
const User_has_signature = database.define('user_has_signature', {
    usu_has_signature_id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        allowNull: false,
        primaryKey: true
    },
    user_usu_id: {
        type: Sequelize.STRING,
    },
    signature_aplicativo_signature_aplicativo_id: {
        type: Sequelize.STRING,
    },
    signature_type_signature_type_id: {
        type: Sequelize.STRING,
    },
},
{
    freezeTableName: true,
    createdAt: false,
    updatedAt: false,
});
User_has_signature.associate = (models) => {
    User_has_signature.belongsTo(models.User,
      { foreignKey: 'user_usu_id', as: 'users' });
  };
module.exports = User_has_signature;

控制器

用户控制器

const User = require("../../model/user/user")
const User_has_signature = require("../../model/user/user_has_signature")

async index(req, res){
        const user = await User.findAll({
            include: [{
              model: User_has_signature,
              foreignKey: 'user_usu_id',
              through: {
                where: {signature_ttype_signature_type_id: 3}
              }
            }]
          })
        res.status(200).json(user)
        return
    }

The error that is returning to me in the terminal is: (node:15168) UnhandledPromiseRejectionWarning: SequelizeEagerLoadingError: user_has_signature is associated to usuario using an alias. You must use the 'as' keyword to specify the alias within your include statement

我认为您必须指定在编写查询时提供的别名:

include: [{
          model: User_has_signature,
          foreignKey: 'user_usu_id',
          as : 'users'
          through: {
            where: {signature_ttype_signature_type_id: 3}
}]

无论哪种方式,我在 Typescript 中更多地使用 Sequelize,所以我不确定语法。

它处理一对多关系的方式不是我见过的最清楚的(像 Symfony 或 Spring)