2016-06-13 11 views
0

Ich bin Sequelize in einem FeathersJS Projekt, und ich habe ein Problem beim Versuch, Eager laden Verbände und Bestellung von Elterntabelle. Wenn ich nur hinzufügen, die Reihenfolge OR die auf die Abfrage umfassen alles funktioniert, dann ist es, wenn ich beide verwenden, dass ich den Fehler: Unhandled rejection Error: 'sales_flat_order' in order/group clause is not valid associationSequelize: Eager Laden und Bestellen (auf Elterntabelle)

Abfrage:

sequelize.models.orders 
    .findAll({ 
     limit: 10, 
     include: [ sequelize.models.items ], 
     order: [[ sequelize.models.orders, 'createdAt' ]], 
    }) 
    .then(orders => { 
     // Error 
    }); 

Bestellen Modell:

const Sequelize = require('sequelize'); 

module.exports = function(sequelize) { 
    const order = sequelize.define('orders', { 
    id: { type: Sequelize.INTEGER, primaryKey: true, field: 'entity_id' }, 
    customerEmail: { type: Sequelize.STRING, field: 'customer_email' }, 
    customerFirstName: { type: Sequelize.STRING, field: 'customer_firstname' }, 
    customerLastName: { type: Sequelize.STRING, field: 'customer_lastname' }, 
    state: { type: Sequelize.STRING }, 
    grandTotal: { type: Sequelize.FLOAT, field: 'grand_total' }, 
    createdAt: { type: Sequelize.DATE, field: 'created_at' }, 
    updatedAt: { type: Sequelize.DATE, field: 'updated_at' }, 
    }, { 
    freezeTableName: true, 
    tableName: 'sales_flat_order', 
    classMethods: { 
     associate(models) { 
     order.hasMany(models.items, { foreignKey: 'orderId' }); 
     } 
    } 
    }); 

    return order; 
}; 
Modell

Item:

const Sequelize = require('sequelize'); 

module.exports = function(sequelize) { 
    const item = sequelize.define('items', { 
    id: { type: Sequelize.INTEGER, primaryKey: true, field: 'item_id' }, 
    orderId: { type: Sequelize.INTEGER, field: 'order_id' }, 
    productId: { type: Sequelize.INTEGER, field: 'product_id' }, 
    productType: { type: Sequelize.STRING, field: 'product_type' }, 
    sku: { type: Sequelize.STRING }, 
    name: { type: Sequelize.STRING }, 
    qtyOrdered: { type: Sequelize.INTEGER, field: 'qty_ordered' }, 
    price: { type: Sequelize.FLOAT }, 
    createdAt: { type: Sequelize.DATE, field: 'created_at' }, 
    updatedAt: { type: Sequelize.DATE, field: 'updated_at' }, 
    }, { 
    freezeTableName: true, 
    tableName: 'sales_flat_order_item', 
    classMethods: { 
     associate(models) { 
     item.belongsTo(models.orders, { foreignKey: 'orderId' }); 
     } 
    } 
    }); 

    return item; 
}; 

Antwort

0

Das Problem ist, dass

order: [[ sequelize.models.orders, 'createdAt' ]] 

versucht, durch die Spalte ‚createdAt‘ der zugeordnet Modell sequelize.models.orders zu bestellen. Da Sie

schrieb
sequelize.models.orders 
.findAll({ 

ein Versuch durch die zugeordnet Modell bestellen sequelize.models.orders, versuchen Sie das Modell selbst als Verein zu verweisen. Dies funktioniert nicht, weil Sie Verknüpfungen zwischen Bestellungen und Artikeln erstellt haben, nicht jedoch zwischen Bestellungen und Bestellungen.

Der Code für Sie suchen ist wahrscheinlich einfach

order: [['createdAt', 'ASC' ]] 

, die durch das Modell Aufträge angewendet, auf denen Sie findAll(). So bestellt es durch orders.createdAt.

Verwandte Themen