【问题标题】:Sequelizejs: Unhandled rejection SequelizeDatabaseError: column user.playerstatsId does not existSequelizejs:未处理的拒绝 SequelizeDatabaseError:列 user.playerstatsId 不存在
【发布时间】:2018-10-15 13:23:00
【问题描述】:

我有一个现有的数据库,我想从表“用户”中检索,但用户表与“PlayerStats”表具有一对一的关系。我想检索 User 对象,它也是作为 Json 对象而不是外键 Id 的 Playerstats。在编写我的代码并运行它之后,我在控制台中收到错误消息:

    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

据我了解,我觉得续集正在尝试将用户和 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;

我的 PlayerStats 代码:

    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");

        });

    });



}

请教我怎么做。

【问题讨论】:

    标签: sequelize.js


    【解决方案1】:

    我发现了问题,基于这个article

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-21
      • 2018-12-18
      • 2020-07-08
      • 1970-01-01
      • 2019-06-02
      • 2018-06-23
      • 2019-09-19
      • 1970-01-01
      • 2018-12-15
      相关资源
      最近更新 更多