使用嵌套模型上的populate从Angular.js到Sails.js和waterline进行查询

时间:2015-05-15 14:57:03

标签: angularjs sails.js waterline

在我的Sails.js中,我有一个名为Invoices.js的模型,其结构如下:

 module.exports = {

    tableName:'invoices',
    adapter: 'mysql',
    autoPK:false,
    autoCreatedAt: true,
    autoUpdatedAt: true,

attributes: {

    id: {type: 'integer', autoIncrement: true, primaryKey: true},
    doc_mod: {type:'string'},
    doc_n: {type:'integer'},
    createdAt: {type:'date'},
    updatedAt: {type:'date'},
    settled: {type:'integer'},
    invoice_line: {collection:'invoice_lines', via:'invoice'},
    customer: {model:'customers'},
     booking:{collection:'bookings',via:'invoice'}
  }
}

我想从Angular.js查询“姓名”或“姓氏”的客户,在客户端我想出了这个:

.factory('PaymentsService',['$resource',function($resource){

        return{

            Query:function(cursor,sorting,name,surname){
                var allPayments = $resource('http://localhost:1337/invoices');
                return allPayments.query({populate:{'customers':{where:{or:[{name:{contains:name}},{surname:{contains:surname}}]}}},skip:cursor,limit:100,sort:sorting}).$promise;
            }
}

它似乎无法正常工作我总是得到这个不完整和正确的结果:

.....{
"customer": 1,
"id": 4,
"doc_mod": "receipt",
"doc_n": 3,
"createdAt": "2015-05-11T17:07:40.000Z",
"updatedAt": "2015-05-11T17:07:40.000Z",
"settled": 0
},
{
"customer": 1,
"id": 5,
"doc_mod": "receipt",
"doc_n": 4,
"createdAt": "2015-05-11T18:26:55.000Z",
"updatedAt": "2015-05-11T18:26:55.000Z",
"settled": 0
}.....

2 个答案:

答案 0 :(得分:1)

您目前无法以这种方式查询子文档。您需要撤消查询,以便过滤客户,然后返回关联的发票。它可能不是你想要的100%,但水线目前正在解决这个问题!

var allPayments = $resource('http://localhost:1337/customers');

allPayments.query({
  where:{or:[{name:{contains:name}}, {surname:contains:surname}}]},
  populate:'invoices',
  skip:cursor,
  limit:100,
  sort:sorting
})
.$promise

答案 1 :(得分:0)

如果想要两个或更多填充

var allPayments = $resource('http://localhost:1337/customers');

allPayments.query({
    where:{or:[{name:{contains:name}}, {surname:contains:surname}}]},
    populate:['invoices','some_other_populate'],
    skip:cursor,
    limit:100,
    sort:sorting
}).$promise;