Sails / Waterline Populate没有按预期工作

时间:2015-02-10 09:52:55

标签: mysql node.js sails.js waterline

我是bangin'我在最后几个小时靠在墙上,我无法找到解决问题的办法。在我的风帆模型中,我有2个一对多的关联。 ' A'模特可以有很多B'和' B'模特可以有很多C'。在我的控制器中,当我执行a.find().populate('b') (...)时,它返回A模型的整个集合,但仅使用一个B填充A模型的每个条目,这与我在数据库中的当前数据集不匹配( MySQL的)。并且不会填充B模型中的C条目。换句话说,我试图实现像嵌套人口这样的东西。
控制器代码出了问题,对吧?我怎样才能做到这一点? 提前谢谢!

修改

Company.js

module.exports = {

identity: 'company',

attributes: {

    name: {
        type: 'string',
        required: true
    },

    address: {
        type: 'string',
        required: true
    },

    zip_code: {
        type: 'string',
        required: true
    },

    city: {
        type: 'string',
        required: true
    },

    nif: {
        type: 'integer',
        required: true,
        minLength: 9
    },

    country: {
        type: 'string',
        required: true
    },

    phone_number: {
        type: 'string',
        required: true
    },

    email: {
        type: 'email',
        required: true
    },

    facilities: {
        collection: 'facility',
        references: 'facility',
        on: 'id',
        via: 'company'
    }
  }
};

Facility.js

module.exports = {

identity: 'facility',

attributes: {

    company: {
        columnName: 'id_company',
        model: 'company'
    },

    warehouses: {
        collection: 'warehouse',
        references: 'warehouse',
        on: 'id',
        via: 'facility'
    },

    name: {
        type: 'string',
        required: true
    },

    address: {
        type: 'string',
        required: true
    },

    zip_code: {
        type: 'string',
        required: true
    },

    city: {
        type: 'string',
        required: true
    },

    country: {
        type: 'string',
        required: true
    },

    phone_number: {
        type: 'string',
    },

    email: {
        type: 'email',
    },

    longitude: {
        type: 'float',
    },

    latitude: {
        type: 'float'
    }

  }
};

Warehouse.js

module.exports = {

identity: 'warehouse',

attributes: {

    facility: {
        columnName: 'id_facility',
        model: 'facility',
    },

    name: {
        type: 'string',
        required: true
    },

    longitude: {
        type: 'float',
    },

    latitude: {
        type: 'float'
    }

  }
};

MainController的相关代码:

companies: function(req, res) {
    company.find().populate('facilities').exec(function(err, comp){
        var error = '';
        if(err){
            error = 'Unable to retrieve the requested information. Try again later and, if the problem persists, contact the platform administrator.';
        } else if(!comp[0]) {
            error = 'There\'s no company data inserted.';
        }
        // (...)
    });

},

1 个答案:

答案 0 :(得分:1)

您应该从模型中移除referenceson

关于嵌套人口,正如我在评论中所说,Waterline目前不支持它。您可以检查Waterline2,正如他们所说,它提供了嵌套填充的可能性,但不建议用于生产。
否则你可以看看:Sails.js populate nested associations