水线协会,改变外键?

时间:2014-04-03 17:47:53

标签: foreign-keys associations sails.js waterline

最新的水线现在支持协会。以下是一对多

的示例
// A user may have many pets
var User = Waterline.Collection.extend({

  identity: 'user',
  connection: 'local-postgresql',

  attributes: {
    firstName: 'string',
    lastName: 'string',

    // Add a reference to Pets
    pets: {
      collection: 'pet',
      via: 'owner'
    }
  }
});

var Pet = Waterline.Collection.extend({

  identity: 'pet',
  connection: 'local-postgresql',

  attributes: {
    breed: 'string',
    type: 'string',
    name: 'string',

    // Add a reference to User
    owner: {
      model: 'user'
    }
  }
});

这会在宠物集合上创建一个名为owner的字段。除了使用现有数据库之外,这没什么问题。它称之为外键owner_id

无论如何都要覆盖数据库中使用的字段名称?

1 个答案:

答案 0 :(得分:8)

您可以通过设置columnName属性来更改用于任何模型属性的列名:

  attributes: {
    breed: 'string',
    type: 'string',
    name: 'string',

    // Add a reference to User
    owner: {
      columnName: 'owner_id',
      model: 'user'
    }
  }

另请注意,在Sails中定义模型时,不应直接从Waterline扩展,而只需使用适当的名称将模型文件保存在/api/models中,例如: User.js

module.exports = {

   attributes: {
      breed: 'string',
      type: 'string',
      name: 'string',

      // Add a reference to User
      owner: {
         model: 'user',
         columnName: 'owner_id'
      }
   }
}

让Sails / Waterline为您处理身份和连接,除非您真的想要覆盖默认值。