Sails JS Waterline连接多个模型

San*_*mia 7 node.js express sails.js waterline

嗨我正在尝试使用populate方法连接多个表,我用Google搜索并找不到有效的方法,我不想查询db几次来构建结果,是否可以用sails版本来解决它" ~0.10.0-rc7"我正在建造退出大项目,有超过一百个桌子.

var co = {
    adapter: 'someMysqlServer',
    migrate:'safe',
    autoCreatedAt: false,
    autoUpdatedAt: false,
    autoPK:false,
    attributes:{
        id:{
            type:"int",
            primaryKey: true,
            autoIncrement: true
        },
        code:"string",
        priority :"int",
        co_group_c_id :"int",
        timezone_c_id :"int",
        lang_c_id :"int",
        currency_c_id :"int",
        name_used :"string",
        name_official :"string",
        co_tax_no :"int",
        co_vat_no :"int",
        co_vat_reg :"int",
        co_reg_record :"string",
        co_representative :"string",
        co_addresses:{
            collection: "co_address",
            via: "co_user_id"
        },
    }
};
module.exports = co;

var co_address = {
    adapter: 'someMysqlServer',
    migrate:'safe',
    autoCreatedAt: false,
    autoUpdatedAt: false,
    autoPK:false,
    attributes: {
        id:{
            type:"int",
            primaryKey: true,
            autoIncrement: true,
        },
        address_c_id:"int" ,
        address_street_first: "string",
        address_street_second: "int",
        address_street_third: "int",
        address_postalcode: "string",
        address_city: "string",
        co_user_id: {
            model: 'co_user'
        },
        co_id: {
            model: 'co'
        },
        co_address_opening_hours:{
            collection: "co_address_opening_hours",
            via: "co_address_id"
        },
    }
};
module.exports = co_address;

var co_address_opening_hours = {
    adapter: 'someMysqlServer',
    migrate:'safe',
    autoCreatedAt: false,
    autoUpdatedAt: false,
    autoPK:false,
    attributes:{
        id:{
            type:"int",
            primaryKey: true,
            autoIncrement: true
        },
        day_c_id: "int",
        time_from: "datetime",
        time_to :"datetime",
        co_address_id: {
            model: 'co_address'
        }
    }
};
module.exports = co_address_opening_hours;

//controller
    get_co:function(req,res){
        co.find()
            .populate("co_addresses")
            .populate("co_address_opening_hours")
            .exec(function(e, company) {
                if(e) console.log(e);
                console.log(company);
                res.json(company);
    })
Run Code Online (Sandbox Code Playgroud)

vet*_*uri 6

在SailsJS 0.10+中,您可以使用模型关联来执行数据库连接.您可以在这里阅读更多相关信息:http://sailsjs.com/documentation/concepts/models-and-orm/associations

基本上,您首先在模型中定义关联;

var someModel = {
  attributes: {
    name: {
      type: 'text'
    }
  }
};

var someOtherModel = {
  attributes: {
    name: {
      type: 'text'
    },
    associationProp: {
      model: 'someModel'
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

在上面的代码中someOtherModel包含关联(关系)someModel.要执行连接查询,您可以使用.populate()方法.例如,检索所有someOtherModel实体并填充关联属性;

someOtherModel.find().populate('associationProp').exec(...);
Run Code Online (Sandbox Code Playgroud)

对于MySQL和PSQL适配器,还有.query()方法,您可以编写一些手写的SQL查询来执行(这也适用于风帆<0.10);

Model.query(<sql query>, <optional data>, callback);
Run Code Online (Sandbox Code Playgroud)