簡體   English   中英

如何用sequelize建立模型屬於多個關聯

[英]How to build model with sequelize for belong to many association

這就是我在Country.js中寫的(除了數據類型與User.js完全相同):

module.exports = function(sequelize, DataTypes) {
    const Country = sequelize.define('country', 
    {
        id: {
            type: DataTypes.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        code: {
            type: DataTypes.INTEGER        
        },
        alpha2: {
            type: DataTypes.STRING
        },
        alpha3: {
            type: DataTypes.STRING
        },
        name_en: {
            type: DataTypes.STRING
        },
        name_fr: {
            type: DataTypes.STRING
        }
    },
    {
        freezeTableName: true,
        timestamps: false
    });

    Country.associate = ( models ) => {
      models.Country.belongsToMany(models.User, {
        through: 'country_user',
        as: 'user',
        foreignKey: 'id_country'
      });
    };

    return Country;
}

這是我的查詢:

router.get('/thisuserCountries', function(req, res, next){
    User(db, Sequelize.DataTypes).findOne({
        include: [{
            model: Country(db, Sequelize.DataTypes),
            as: 'countries',
            required: false,
            attributes: ['id'],
        }],
        where: {
            email: 'jerome.charlat@gmail.com'
        }       
    })
      .then(user => {
          if(user) {
              res.json(user)
          }
          else {
              res.send('User does not exist')
          }
      })
      .catch(err => {
          res.send('error: ' + err)
      })
})

這是我的db.js:

const Sequelize = require('sequelize')
const db = new Sequelize('travel_memories', 'root', '', {
    host: 'localhost',
    dialect: 'mysql',
    port: 3306
})

db
  .authenticate()
  .then(() => {
    console.log('Connection has been established successfully.');
  })
  .catch(err => {
    console.error('Unable to connect to the database:', err);
  });

const models = {
  Country: db.import('../models/Country'),
  User: db.import('../models/User'),
  CountryUserJoin: db.import('../models/Country_user')
};

Object.keys(models).forEach((modelName) => {
  if('associate' in models[modelName]){
    models[modelName].associate(models);
  }
});

module.exports = db

郵遞員說:錯誤SequelizeEagerLoadingError:國家未與用戶關聯!

但是,當我在每個模型中關聯表時,我應該在through參數中寫入模型User_country。 所以我試圖寫一些像:

Country.associate = ( models ) => {
      models.Country.belongsToMany(models.User, {
        through: models.Country_user,
        as: 'user',
        foreignKey: 'id_country'
      });
    };

控制台說,當我啟動服務器時,在查詢任何內容之前:

SequelizeAssociationError:country.belongsToMany(user)需要通過選項,傳遞字符串或模型。

所以我被封鎖了。 我使用文檔中的示例來編寫與models.foo的關聯。 但是實際上模型無處不在。

再次感謝你的幫助 !

沒有太多關於此的文檔,但是在這里它說您在查詢或選擇“多對多”屬性時應使用through選項,如下所示:

...
User(db, Sequelize.DataTypes).findOne({
  include: [{
    model: Country(db, Sequelize.DataTypes),
    as: 'countries',
    required: false,
    through: {
      attributes: ['id']
    }
  }],
  where: {
    email: 'jerome.charlat@gmail.com'
  }       
})
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM