I would like to define a custom finder on my sequelize object. For example, suppose I have a Order model.
var Orders = sequelize.define('Orders', {
...
})
I have a complex query that I would like to reuse in various places.
var sql = 'SELECT'
+ ' CONCAT_WS(\':\', `type`, `id`) AS `id`'
+ ' , `type`'
+ ' , `name`'
+ ' , `amount`'
+ ' , `quantity`'
+ ' , `total`'
+ ' , `createdAt`'
+ ' FROM ('
+ ' SELECT'
+ ' OrderItems.id AS `id`'
+ ' , \'item\' AS `type`'
+ ' , Items.name AS `name`'
+ ' , Items.price AS `amount`'
+ ' , OrderItems.quantity AS `quantity`'
+ ' , OrderItems.quantity * Items.price AS `total`'
+ ' , OrderItems.createdAt AS `createdAt`'
+ ' FROM OrderItems'
+ ' INNER JOIN Items ON Items.id = OrderItems.ItemId'
+ ' WHERE OrderId = :OrderId'
+ ' UNION'
+ ' SELECT'
+ ' OrderPayments.id AS `id`'
+ ' , \'payment\' AS `type`'
+ ' , Payments.name AS `name`'
+ ' , OrderPayments.amount AS `amount`'
+ ' , 0 AS `quantity`'
+ ' , OrderPayments.amount AS `total`'
+ ' , OrderPayments.createdAt AS `createdAt`'
+ ' FROM OrderPayments'
+ ' INNER JOIN Payments ON Payments.id = OrderPayments.PaymentId'
+ ' WHERE OrderId = :OrderId'
+ ' ) OrderLines'
+ ' ORDER BY createdAt DESC'
Here's how I'd like to run the query.
Orders.find(123).success(function(order) {
order.getDataFromMyComplexQuery('arg1', 'arg2').success(function(results){
// Do something with the results
})
});
Or like:
Orders.getDataFromMyComplexQuery('arg1', 'arg2').success(function(results){
// Do something with the results
})
It's like a stored procedure but in Sequelize.