【问题标题】:Node JS Sequelize sql associationsNode JS Sequelize sql 关联
【发布时间】:2017-06-08 03:57:42
【问题描述】:

所以仍在尝试弄清楚如何使用关联和使用 sequelize。我正在尝试关联具有多个团队的游戏。

游戏:

"use strict"
module.exports = (sequelize, DataTypes) => {
    var game =  sequelize.define('game', {
            gameId: {
                type: DataTypes.INTEGER,
                primaryKey: true,
                autoIncrement: true
            },
            awayTeam: {
                type: DataTypes.INTEGER,
                references: {
                    model: "team",
                    key: 'teamId',
                },
                allowNull: false
            },
            homeTeam: {
                type: DataTypes.INTEGER,
                references: {
                    model: "team",
                    key: 'teamId',
                },
                allowNull: false
            },
            awayTeamScore: {
                type: DataTypes.INTEGER,
                allowNull: false
            },
            homeTeamScore: {
                type: DataTypes.INTEGER,
                allowNull: false
            },
        },
        {
            timestamps: false,
            tableName: 'game',
                associate: function (models) {
                /// trying to figure this out
            }
        }
    );
    return game;
};

团队:

"use strict"
module.exports = (sequelize, DataTypes) => {
    var team = sequelize.define('team', {
            teamId: {
                type: DataTypes.INTEGER,
                primaryKey: true,
                autoIncrement: true
            },
            name: {
                type: DataTypes.STRING,
                allowNull: false
            },
            city: {
                type: DataTypes.STRING,
                allowNull: false
            }
        },
        {
            timestamps: false,
            tableName: 'team',
            associate: function(models){
                /// trying to figure this out
            }
        }
    );

    return team;
};

会是 team belongsToMany games 和 games hasMany teams?

【问题讨论】:

    标签: sql node.js sequelize.js


    【解决方案1】:

    你需要在associate()类方法中使用hasMany()函数。

    游戏:

    "use strict";
    
    var game = {};
    var classmethods = {};
    
    module.exports = (sequelize, DataTypes) => {
        game =  sequelize.define('game', {
                gameId: {
                    type: DataTypes.INTEGER,
                    primaryKey: true,
                    autoIncrement: true
                },
                awayTeam: {
                    type: DataTypes.INTEGER,
                    references: {
                        model: "team",
                        key: 'teamId',
                    },
                    allowNull: false
                },
                homeTeam: {
                    type: DataTypes.INTEGER,
                    references: {
                        model: "team",
                        key: 'teamId',
                    },
                    allowNull: false
                },
                awayTeamScore: {
                    type: DataTypes.INTEGER,
                    allowNull: false
                },
                homeTeamScore: {
                    type: DataTypes.INTEGER,
                    allowNull: false
                },
            },
            {
                timestamps: false,
                classmethods: classmethods
            }
        );
        return game;
    };
    
    classmethods.associate = function (models) {
      game.hasMany(models.team, {foreignKey: 'teamId'});
    };
    

    为此,您还需要以这种方式设置 Sequelize: https://github.com/jklepatch/kangaroojs/blob/master/apps/web/models/index.js

    如果您还希望能够使用团队模型中的关联,则需要在团队模型中使用'belongsTo()`

    "use strict";
    
    var team;
    var classmethods;
    
    module.exports = (sequelize, DataTypes) => {
        team = sequelize.define('team', {
                teamId: {
                    type: DataTypes.INTEGER,
                    primaryKey: true,
                    autoIncrement: true
                },
                name: {
                    type: DataTypes.STRING,
                    allowNull: false
                },
                city: {
                    type: DataTypes.STRING,
                    allowNull: false
                }
            },
            {
                timestamps: false,
                tableName: 'team',
                classmethods: classmethods
            }
        );
    
        return team;
    };
    
    classmethods.associate = function (models) {
      game.belongsTo(models.game);
    };
    

    【讨论】:

      【解决方案2】:

      这是我在 sequelize 中使用关联的代码。

      game.js

      import DataTypes from 'sequelize';
      
          const game =  sequelize.define('game', {
                  gameId: {
                      type: DataTypes.INTEGER,
                      primaryKey: true,
                      autoIncrement: true
                  },
                  awayTeam: {
                      type: DataTypes.INTEGER,
                      references: {
                          model: "team",
                          key: 'teamId',
                      },
                      allowNull: false
                  },
                  homeTeam: {
                      type: DataTypes.INTEGER,
                      references: {
                          model: "team",
                          key: 'teamId',
                      },
                      allowNull: false
                  },
                  awayTeamScore: {
                      type: DataTypes.INTEGER,
                      allowNull: false
                  },
                  homeTeamScore: {
                      type: DataTypes.INTEGER,
                      allowNull: false
                  },
              },
              {   
                  tablenName: 'game'
                  timestamps: false,
                  freezeTableName: true;
      
      });
      
      module.exports = game;
      

      team.js

      import DataTypes from 'sequelize';
      
      const team = sequelize.define('team', {
                  teamId: {
                      type: DataTypes.INTEGER,
                      primaryKey: true,
                      autoIncrement: true
                  },
                  name: {
                      type: DataTypes.STRING,
                      allowNull: false
                  },
                  city: {
                      type: DataTypes.STRING,
                      allowNull: false
                  }
              },
              {
      
                  tableName: 'team',
                  freezeTableName: true,
                  timestamps: false,
      });
      
      module.exports = team;
      

      //index.js(关联)

      import game from '../models/game';
      import team from '../models/team';
      
      game.belongsTo(team, {foreignKey: 'awayTeam', targetKey: 'teamId'});
      game.belongsTo(team, {foreignKey: 'homeTeam', targetKey: 'teamId'});
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-21
        • 2018-01-03
        • 1970-01-01
        • 1970-01-01
        • 2020-01-29
        • 2019-09-06
        • 1970-01-01
        • 2018-07-30
        相关资源
        最近更新 更多