我无法使用populate()来处理我的sails.js项目

时间:2014-12-03 06:09:12

标签: mysql node.js orm sails.js waterline

我一直在努力争取最简单的populate()查询工作在我的新sails.js项目上。问题是要填充的字段总是有一个空数组。我对这些例子感到厌倦,所以我不认为我有语法错误,但也许我疲惫的眼睛不让我看。

以下是进行查询的两种模型+方法:

模特部门:

    attributes: {
    id: {
        type: 'integer',
        primaryKey: true
    },
    name: {
        type: "string",
        required: true
    },
    shortName: {
        type: "string"
    },
    schoolName: {
        model: 'Schools'
    },
    courses: {
        collection: 'Courses',
        via: "departmentId"
    }
},

模型课程:

    attributes: {
    id: {
        type: "integer",
        primaryKey: true
    },
    name: {
        type: "string",
        required: true
    },
    shortName: {
        type: "string"
    },
    departmentId: {
        model: "Departments"
    }
},

最后,拨打电话的方法:

    getDepartmentsBySchool: function(schoolName, callback){
    Departments.find({schoolName: schoolName}).populate("courses").exec(function(error, departments){
        if(error){
            console.log("Departments could not be found");
            return callback(error, []);
        } else{
            console.log(departments.length + " departments found");
            return callback(null, departments);
        }
    });
}

结果:

courses: []

总是

我正在使用MySQL,所以适配器是sails-mysql。我会非常感谢任何类型的指针,因此我不必放弃使用此框架。

编辑:

将迁移更改为"更改"结果如下:

http://tinypic.com/r/9kv9ev/8

1 个答案:

答案 0 :(得分:0)

我测试了你最后提供的代码示例。我没有将shoolName作为对另一个集合的引用,而是将其保留为字符串,因为我想测试部门和课程之间的关联。一切似乎都很好。课程进展顺利。你可能想检查一件事。在使用类型的关联时:

   schoolName: {
        model: 'Schools'
    },

schoolName必须包含学校表中的记录ID。我希望你正确地设置它。

有时它可能是与节点模块sails-mysql相关的问题。您可以尝试重新安装sails-mysql模块

npm uninstall sails-mysql
npm cache clear
npm install sails-mysql

让我知道这是否有效。