【问题标题】:my model didn't create a foreign key with seqeulize我的模型没有使用 seqeulize 创建外键
【发布时间】:2022-01-19 00:30:04
【问题描述】:

所以我为我的模型 entretien 和 typeEntretien 创建了一个外键,模型是在 mysql 中创建的,但我找不到我的外键,我正在使用 sequelize 6.13.0,我认为索引中的问题可能关于对象键,我尝试了很多解决方案,但没有一个有效,我是 sequelize 的新手,我在 youtube 上跟着 tutto,我确定索引是错误的

模特企业家


    module.exports= (sequelize,DataTypes)=>{
        console.log(sequelize);
        const entretien =sequelize.define('entretien',{
            id:{
                type:DataTypes.INTEGER,
                primaryKey: true,
                autoIncrement:true
            },
           idType:{
                type:DataTypes.INTEGER,
               
            },
            idFournisseur:{
                type:DataTypes.INTEGER,
                
            },
            date:{
                type:DataTypes.STRING,
                allowNull:false
            
            },
            montant:{
                type:DataTypes.STRING,
                allowNull:false
            }
           
        },
    
        {
            timestamps:true,
            tableName:"entretien",
        }
        
        );
        entretien.associate=function(){
            this.belongsTo(sequelize.models.typeEntretien,{
                foreignKey:'idType'
             
            })
            this.associate=function(){
                this.belongsTo(sequelize.models.fournisseur,{
                    foreignKey:"idFournisseur",
                    as:"fournisseur"
                })
           
        }}
        return entretien
    }
    ```
    
    model typeEntretien 
    ```
    
    module.exports= (sequelize,DataTypes)=>{
        const typeEntretien =sequelize.define('typeEntretien',{
           
           id:{
               type:DataTypes.INTEGER,
               primaryKey:true,
               autoIncrement:true
            },
               
             
               libelle:{
                   type:DataTypes.STRING
               }
      
          },
          {
            timestamps:true,
            tableName:"typeEntretien",
        }
          );
      
          
      
        return typeEntretien
    }
    ```
    
    idex.js  of sequelize 
    const dbConfig=require('../config/dbConfig')
    
    const {Sequelize ,DataTypes}=require('sequelize')
    
    const sequelize =new Sequelize(
        dbConfig.DB,
        dbConfig.USER,
        dbConfig.PASSWORD,{
            host:dbConfig.HOST,
            dialect:dbConfig.dialect,
            operatorAliases:false,
            options: {
                requestTimeout: 60000,
              },
            
            pol:{
                max:dbConfig.pool.max,
                min:dbConfig.pool.min,
                acquire:dbConfig.pool.acquire,
                idle:dbConfig.pool.idle
            }
        }
    
    )
    
    sequelize.authenticate()
    .then(()=>{
        console.log('connected..');
    })
    .catch(err=>{
    console.log('Error' +err);
    })
    
    const db={}
    
    db.Sequelize=Sequelize
    db.sequelize=sequelize
    
    
    Object.keys(db).forEach((modelName) => {
        console.log(db);
        if (db[modelName].associate) {
          db[modelName].associate(db);
        }
      });
    
    
    db.users=require('./user.js')(sequelize , DataTypes)
    db.conducteur=require('./conducteur.js')(sequelize , DataTypes)
    db.voiture=require('./voiture.js')(sequelize , DataTypes)
    db.entretien=require('./entretien.js')(sequelize , DataTypes)
    db.fournisseur=require('./fournisseur')(sequelize , DataTypes)
    db.réparation=require('./réparation')(sequelize , DataTypes)
    db.transport=require('./transport')(sequelize , DataTypes)
    db.typeEntretien=require('./typeEntretien')(sequelize , DataTypes)
    db.marqueVoiture=require('./marqueVoiture')(sequelize , DataTypes)
    
    
    
    
    db.sequelize.sync({force :true})
    .then(()=>{
        console.log('yes re-sync done');
    })
    
    module.exports=db
    ```

【问题讨论】:

    标签: node.js sequelize.js mysql-workbench backend sequelize-cli


    【解决方案1】:

    首先,您需要像这样更正associate 函数:

    entretien.associate=function(){
                entretien.belongsTo(sequelize.models.typeEntretien,{
                    foreignKey:'idType'
                 
                })
                entretien.belongsTo(sequelize.models.fournisseur,{
                        foreignKey:"idFournisseur",
                        as:"fournisseur"
                })
    }
    

    其次,需要将关联注册移到此行之后:

     db.marqueVoiture=require('./marqueVoiture')(sequelize , DataTypes)
     // all models should be registered and stored in db object prior this code
     Object.keys(db).forEach((modelName) => {
            console.log(db);
            if (db[modelName].associate) {
              db[modelName].associate(db);
            }
          });
    

    【讨论】:

      猜你喜欢
      • 2015-05-20
      • 1970-01-01
      • 2021-10-30
      • 2014-11-11
      • 2011-07-23
      • 1970-01-01
      • 2011-05-10
      • 2021-03-10
      • 2011-12-13
      相关资源
      最近更新 更多