From d27b2eb25fab85cd1988a7f5f8f793faf2589b09 Mon Sep 17 00:00:00 2001 From: mamboer Date: Wed, 13 May 2015 13:18:50 +0800 Subject: [PATCH] fix issue #587 --- lib/scope.js | 10 ++++++++++ test/relations.test.js | 21 +++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/lib/scope.js b/lib/scope.js index c0b2a56d..82a79b52 100644 --- a/lib/scope.js +++ b/lib/scope.js @@ -161,6 +161,16 @@ function defineScope(cls, targetClass, name, params, methods, options) { // see https://github.com/strongloop/loopback/issues/1076 if (f._scope.collect && condOrRefresh !== null && typeof condOrRefresh === 'object') { + //extract the paging filters to the through model + if( typeof(condOrRefresh.limit) !== 'undefined' ){ + f._scope.limit = condOrRefresh.limit; + } + if( typeof(condOrRefresh.skip) !== 'undefined' ){ + f._scope.skip = condOrRefresh.skip; + } + delete condOrRefresh.limit; + delete condOrRefresh.skip; + // Adjust the include so that the condition will be applied to // the target model f._scope.include = { diff --git a/test/relations.test.js b/test/relations.test.js index 8168f825..c848b188 100644 --- a/test/relations.test.js +++ b/test/relations.test.js @@ -718,6 +718,27 @@ describe('relations', function () { } }); + it('should fetch scoped instances with paging filters', function (done) { + Physician.create(function (err, physician) { + physician.patients.create({name: 'a'}, function () { + physician.patients.create({name: 'z'}, function () { + physician.patients.create({name: 'c'}, function () { + verify(physician); + }); + }); + }); + }); + function verify(physician) { + physician.patients({ limit:1, skip:1 },function (err, ch) { + should.not.exist(err); + should.exist(ch); + ch.should.have.lengthOf(1); + ch[0].name.should.eql('z'); + done(); + }); + } + }); + it('should find scoped record', function (done) { var id; Physician.create(function (err, physician) {