代码之家  ›  专栏  ›  技术社区  ›  appzone_oto

Sequelizejs:未处理的拒绝SequelizeDatabaseError:列用户。playerstatsId不存在

  •  0
  • appzone_oto  · 技术社区  · 6 年前

    我有一个现有的数据库,我想从“User”表中检索,但User表与“PlayerStats”表有一对一的关系。我想将User对象以及它的Playerstats作为Json对象而不是外键Id进行检索。在编写代码并运行它之后,控制台中出现了一个错误:

        Sat, 05 May 2018 02:18:26 GMT sequelize deprecated String based operators are now deprecated. Please use Symbol based operators for better security, read more at http://docs.sequelizejs.com/manual/tutorial/querying.html#operators at node_modules\sequelize\lib\sequelize.js:242:13
    Executing (default): SELECT "user"."id", "user"."address", "user"."bio", "user"."country", "user"."email", "user"."firstname", "user"."gender", "user"."lastname", "user"."locked", "user"."money", "user"."onlinestatus", "user"."password", "user"."phonenumber", "user"."picture", "user"."username", "user"."usertype", "user"."playerstatsId", "playerstats"."id" AS "playerstats.id", "playerstats"."time" AS "playerstats.time", "playerstats"."expenses" AS "playerstats.expenses", "playerstats"."friends" AS "playerstats.friends", "playerstats"."loss" AS "playerstats.loss", "playerstats"."matchplayed" AS "playerstats.matchplayed", "playerstats"."profit" AS "playerstats.profit", "playerstats"."readmessage" AS "playerstats.readmessage", "playerstats"."referrals" AS "playerstats.referrals", "playerstats"."referrer" AS "playerstats.referrer", "playerstats"."totalmessage" AS "playerstats.totalmessage", "playerstats"."unreadmessage" AS "playerstats.unreadmessage", "playerstats"."wallet" AS "playerstats.wallet", "playerstats"."wins" AS "playerstats.wins" FROM "users" AS "user" LEFT OUTER JOIN "playerstats" AS "playerstats" ON "user"."playerstatsId" = "playerstats"."id" LIMIT 1;
    Unhandled rejection SequelizeDatabaseError: column user.playerstatsId does not exist
    

    据我所知,我觉得sequelize正在尝试将用户和Playerstats表连接在一起。

    这是我的用户代码:

      var Sequelize = require('sequelize');
    
    var db = require('../database/postgres');
    
    
    var User =db.define('user', {
    
        id: {
            type: Sequelize.INTEGER,
            allowNull: false,
            primaryKey: true
        },
    
        address: {
            type: Sequelize.STRING,
            field: 'address'
        },
    
        bio: {
            type: Sequelize.STRING,
            field: 'bio'
        },
    
        country: {
            type: Sequelize.STRING,
            field: 'country'
        },
    
        email: {
            type: Sequelize.STRING,
            field: 'email'
        },
    
        firstname: {
            type: Sequelize.STRING,
            field: 'firstname'
        },
    
        gender: {
            type: Sequelize.STRING,
            field: 'gender'
        },
    
        lastname: {
            type: Sequelize.STRING,
            field: 'lastname'
        },
    
        locked: {
            type: Sequelize.BOOLEAN,
            field: 'locked'
        },
    
        money: {
            type: Sequelize.DOUBLE,
            field: 'money'
        },
    
        onlinestatus: {
            type: Sequelize.STRING,
            field: 'onlinestatus'
        },
    
        password: {
            type: Sequelize.STRING,
            field: 'password'
        },
    
        phonenumber: {
            type: Sequelize.STRING,
            field: 'phonenumber'
        },
    
        picture: {
            type: Sequelize.STRING,
            field: 'picture'
        },
    
        username: {
            type: Sequelize.STRING,
            field: 'username'
        },
    
        usertype: {
            type: Sequelize.STRING,
            field: 'usertype'
        },
    
    
    
    }, {
        tableName: 'users',
    
        timestamps: false
    });
    
    
    module.exports = User;
    

        var Sequelize = require('sequelize');
    
    var db = require('../database/postgres');
    
    
    var PlayerStats =db.define('playerstats', {
    
        id: {
            type: Sequelize.INTEGER,
            field: 'id',
            allowNull: false,
            primaryKey: true
        },
    
        time: {
            type: Sequelize.DATE,
            field: 'time'
        },
    
        expenses: {
            type: Sequelize.DOUBLE,
            field: 'expenses'
        },
    
        friends: {
            type: Sequelize.INTEGER,
            field: 'friends'
        },
    
        loss: {
            type: Sequelize.INTEGER,
            field: 'loss'
        },
    
        matchplayed: {
            type: Sequelize.INTEGER,
            field: 'matchplayed'
        },
    
        profit: {
            type: Sequelize.DOUBLE,
            field: 'profit'
        },
    
        readmessage: {
            type: Sequelize.INTEGER,
            field: 'readmessage'
        },
    
        referrals: {
            type: Sequelize.INTEGER,
            field: 'referrals'
        },
    
        referrer: {
            type: Sequelize.INTEGER,
            field: 'referrer'
        },
    
        totalmessage: {
            type: Sequelize.INTEGER,
            field: 'totalmessage'
        },
    
        unreadmessage: {
            type: Sequelize.INTEGER,
            field: 'unreadmessage'
        },
    
        wallet: {
            type: Sequelize.DOUBLE,
            field: 'wallet'
        },
    
        wins: {
            type: Sequelize.INTEGER,
            field: 'wins'
        }
    
    }, {
        tableName: 'playerstats',
    
        timestamps: false
    });
    
    
    module.exports = PlayerStats;
    

    以及运行它们的最后一个主js类:

        var io = require('socket.io')(process.env.PORT || 4000);
    
    var User = require('./server/entities/user');
    
    var PlayerStats = require('./server/entities/playerstats');
    
    
    
    
    
    new Server();
    
    const room = 'quick-chat';
    
    function Server() {
    
    
        User.belongsTo(PlayerStats,{as: 'playerstats'});
    
    
        User.findOne({include: [{
    
            model: PlayerStats,
    
            as: 'playerstats'
    
        }]}).then(function (user) {
    
            console.log(user);
    
        });
    
    
        var global = this;
    
    
    
        io.on('connection',function(socket){
    
            console.log("A client has connected");
    
            socket.on('join', (data) => {
    
                //todo connect to the gambeat db and update the users info to online
    
                socket.join(room);
    
                console.log("client has joined");
    
            });
    
            socket.on('disconnect', () => {
    
                console.log("client has disconnect");
    
            });
    
        });
    
    
    
    }
    

    请告诉我怎么做好吗。

    1 回复  |  直到 6 年前
        1
  •  2
  •   appzone_oto    6 年前

    基于此,我找到了问题所在 article ,则,

    默认情况下,将根据目标模型名称和目标主键名称生成belongsTo关系的外键。 默认大小写为camelCase,但如果源模型配置为下划线:true,则foreignKey将为snake\u大小写。

    这导致了“playerstatsId”,而我的用户表中没有这个值。可以通过使用外键选项为外键指定正确的名称来更正此问题。因此

    User.belongsTo(PlayerStats,{foreignKey: 'playerstats',as: 'playerstat'});