【问题标题】:Sequelize generating wrong query? sequelize-auto-ts and sequelizeSequelize 生成错误的查询? sequelize-auto-ts 和 sequelize
【发布时间】:2014-10-24 04:01:51
【问题描述】:

我正在使用 Typescript、NodeJS 和 sequelize-auto-ts 进行模型生成。我想在 find 查询中放置一个包含的两个模型给了我错误的结果,这反过来是由于错误的查询被触发。这是有问题的两个模型;

rewardcodes = <types.rewardcodesModel> sequelize.define<types.rewardcodeInstance, types.rewardcodePojo>('rewardcodes', {
    'rewardid': { type: 'number', primaryKey: true, autoIncrement: true },
    'code':'string',
    'amount':'string'
    },
    {
        timestamps: false,
        classMethods: {
            getrewardcode:(rewardcode:types.rewardcodePojo) => {
                var where:{[key:string]:any} = {};
                if (rewardcode['rewardid'] !== undefined) { where['rewardid'] = rewardcode['rewardid']}
                if (rewardcode['code'] !== undefined) { where['code'] = rewardcode['code']}
                if (rewardcode['amount'] !== undefined) { where['amount'] = rewardcode['amount']}
                return this.find({where: where});
            }
        }
    });

userfreecredits = <types.userfreecreditsModel> sequelize.define<types.userfreecreditInstance, types.userfreecreditPojo>('userfreecredits', {
    'id': { type: 'number', primaryKey: true, autoIncrement: true },
    'userid': { type: 'number', references:user },
    'rewardid': {type: 'number',references: rewardcodes},
    'isexpired':'Buffer',
    'isused':'Buffer',
    'isactive':'Buffer',
    'expireydate':'Date'
    },
    {
        timestamps: false,
        classMethods: {
            getuserfreecredit:(userfreecredit:types.userfreecreditPojo) => {
                var where:{[key:string]:any} = {};
                if (userfreecredit['id'] !== undefined) { where['id'] = userfreecredit['id']}
                if (userfreecredit['userid'] !== undefined) { where['userid'] = userfreecredit['userid']}
                if (userfreecredit['rewardid'] !== undefined) { where['rewardid'] = userfreecredit['rewardid']}
                if (userfreecredit['isexpired'] !== undefined) { where['isexpired'] = userfreecredit['isexpired']}
                if (userfreecredit['isused'] !== undefined) { where['isused'] = userfreecredit['isused']}
                if (userfreecredit['isactive'] !== undefined) { where['isactive'] = userfreecredit['isactive']}
                if (userfreecredit['expireydate'] !== undefined) { where['expireydate'] = userfreecredit['expireydate']}
                return this.find({where: where});
            }
        }
    });

我正在进行的数据库调用如下;

 var association = <sequelize.AssociationOptions>{};
    association.foreignKey = "rewardid";
    models.userfreecredits.hasOne(models.rewardcodes,association);
    models.rewardcodes.hasMany(models.userfreecredits);

    var findOptions = <sequelize.FindOptions>{};
    findOptions.where = { userid: userId, isexpired: false, isused: false, isactive: true, expireydate: { gte: new Date() } };
   findOptions.include = models.rewardcodes;

    return models.userfreecredits.find(findOptions).complete((err: Error, credits: types.userfreecreditInstance) => {
        return credits;
    });

但是从上面生成的查询是错误的,说 userfreecredit.id=rewardcodes.id

SELECT `userfreecredits`.*, `rewardcode`.`rewardid` AS `rewardcode.rewardid`,
`rewardcode`.`code` AS `rewardcode.code`, `rewardcode`.`amount` AS 
   `rewardcode.amount` FROM `userfreecredits` LEFT OUTER JOIN `rewardcodes` AS
        `rewardcode` ON `userfreecredits`.`id` = `rewardcode`.`rewardid` 
         WHERE `userfreecredits`.`userid`='1' AND `userfreecredits`.`isexpired`=false
        AND `userfreecredits`.`isused`=false AND `userfreecredits`.`isactive`=true
        AND`userfreecredits`.`expireydate` >= '2014-08-29 21:49:08' LIMIT 1;

请帮助我指出我做错了什么或遗漏了什么。

【问题讨论】:

  • 所以我发现我的错误而不是 hasOne 我不得不使用 belongsTo 并且它可以作为参考文档给了我一些意义但过了一段时间gist.github.com/sdepold/1757695
  • 自己创建答案并接受它,然后可以从问题列表中看到该主题已关闭(并已回答)...

标签: node.js typescript sequelize.js


【解决方案1】:

所以我发现我的错误而不是 hasOne 我不得不使用 belongsTo 并且它起作用了。作为参考文档 http://sequelizejs.com/docs/latest 给了我一些意义,但过了一段时间 gist.github.com/sdepold/1757695

【讨论】:

  • 很高兴您找到了解决方案。我没有意识到其他人甚至在使用sequelize-auto-ts。很高兴您发现它很有用。
  • 谢谢@SamuelNeff 我也写了一篇关于它的博文bilalhasankhan.blogspot.in/2014/11/…
猜你喜欢
  • 2018-07-23
  • 1970-01-01
  • 2017-03-23
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
相关资源
最近更新 更多