How to do ordering a select in Sequelize correctly?

南笙酒味 提交于 2019-12-12 01:51:37

问题


I can't get a very simple version of http://docs.sequelizejs.com/en/latest/docs/querying/#ordering to work. Please help.


This query:

const result = await db.dbo__peach_payments_transactions
.findOne({
  'order': [db.dbo__peach_payments_transactions, 'created_at', 'DESC'],
  'include': [{ model: db.dbo__orders, where: { 'users_id': userId} }]
});

gives me the error: TypeError: Converting circular structure to JSON


This query:

const result = await db.dbo__peach_payments_transactions.findOne({
  'order': 'dbo.peach_payments_transactions.created_at DESC',
  'include': [{ model: db.dbo__orders, where: { 'users_id': userId} }]
});

gives me the error: "invalid reference to FROM-clause entry for table "peach_payments_transactions""


And this query looks like it should work:

const result = await db.dbo__peach_payments_transactions.findOne({
  'order': '"dbo.peach_payments_transactions"."created_at" DESC',
  'include': [{ model: db.dbo__orders, where: { 'users_id': userId} }]
});

but gives me the error: TypeError: Cannot set property 'order' of undefined

It outputs good SQL though (see the very last line):

SELECT 
  "dbo.peach_payments_transactions"."peach_payments_transactions_id", "dbo.peach_payments_transactions"."orders_id", "dbo.peach_payments_transactions"."payment_states_id", 
  "dbo.peach_payments_transactions"."response_data", "dbo.peach_payments_transactions"."token", "dbo.peach_payments_transactions"."result", "dbo.peach_payments_transactions"."reason_code", 
  "dbo.peach_payments_transactions"."reason_message", "dbo.peach_payments_transactions"."price", "dbo.peach_payments_transactions"."processed_at", "dbo.peach_payments_transactions"."created_at",
  "dbo.peach_payments_transactions"."updated_at", "dbo.order"."orders_id" AS "dbo.order.orders_id", "dbo.order"."users_id" AS "dbo.order.users_id", "dbo.order"."email" AS "dbo.order.email", 
  "dbo.order"."phone" AS "dbo.order.phone", "dbo.order"."token" AS "dbo.order.token", "dbo.order"."shipped_at" AS "dbo.order.shipped_at", "dbo.order"."created_at" AS "dbo.order.created_at", 
  "dbo.order"."updated_at" AS "dbo.order.updated_at" 
FROM 
  "dbo"."peach_payments_transactions" AS "dbo.peach_payments_transactions" 
  INNER JOIN "dbo"."orders" AS "dbo.order" 
  ON 
    "dbo.peach_payments_transactions"."orders_id" = "dbo.order"."orders_id" AND
    "dbo.order"."users_id" = '71e1989b-67d9-4712-ad71-51dfa56b32bd' 
  ORDER BY "dbo.peach_payments_transactions".created_at DESC LIMIT 1;

Update - models

peach_payments_transactions:

    entity['peach_payments_transactions_id'] = {type: Sequelize.UUID, primaryKey: true, 'defaultValue': Sequelize.UUIDV4};
    entity['orders_id'] = helper.getForeignKey('orders_id', orders.getModel(db));
    entity['payment_states_id'] = helper.getForeignKey('payment_states_id', payment_states.getModel(db));
    entity['response_data'] = Sequelize.TEXT;
    entity['token'] = Sequelize.TEXT;
    entity['result'] = Sequelize.TEXT;
    entity['reason_code'] = Sequelize.TEXT;
    entity['reason_message'] = Sequelize.TEXT;
    entity['price'] = Sequelize.BIGINT;
    entity['processed_at'] = Sequelize.DATE;
    const result = db.define('dbo.peach_payments_transactions', entity, options);
    result.belongsTo(orders.getModel(db), {foreignKey: 'orders_id'});
    result.belongsTo(payment_states.getModel(db), {foreignKey: 'payment_states_id'});

orders

    entity['orders_id'] = {type: Sequelize.UUID, primaryKey: true, 'defaultValue': Sequelize.UUIDV4};
    entity['users_id'] = helper.getForeignKey('users_id', users.getModel(db));
    entity['email'] = Sequelize.TEXT;
    entity['phone'] = Sequelize.TEXT;
    entity['token'] = Sequelize.TEXT;
    entity['shipped_at'] = Sequelize.DATE;
    const result = db.define('dbo.orders', entity, options);
    result.belongsTo(users.getModel(db), {foreignKey: 'users_id'});

来源:https://stackoverflow.com/questions/38304742/how-to-do-ordering-a-select-in-sequelize-correctly

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!