2016-06-13 5 views
0

私はFeathersJSプロジェクトでSequelizeしていますが、熱心な負荷の関連付けと親テーブルによる注文を試みるときに問題が発生しています。 Unhandled rejection Error: 'sales_flat_order' in order/group clause is not valid associationSequelize:Eagerの読み込みと注文(親テーブル)

クエリ:

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

注文モデル:

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; 
}; 
を私はちょうどオーダー ORを追加した場合、クエリに含まれ、すべてが正常に動作し、私は両方を使用する場合、それは私がエラーを取得することです

項目モデル:

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; 
}; 

答えて

0

問題は

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

関連するモデルsequelize.models.ordersの列「createdAt」でご注文しようとしていることです。あなたは関連するモデルsequelize.models.ordersで注文する

sequelize.models.orders 
.findAll({ 

試みを書いたので、あなたは協会としてモデル自体を参照するようにしてみてください。オーダーとオーダーの間ではなく、オーダーとアイテム間の関連付けを作成したため、これは機能しません。

あなたが探しているコードは、単に、おそらくあなたがfindAll()を適用した上で、モデルによって順序付け

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

です。だからそれはorders.createdAtで注文する。

関連する問題