簡體   English   中英

從Sails.js中的關聯模型訪問模型的屬性

[英]Accessing a model's attributes from an associated model in Sails.js

我正在使用更新的數據庫適配器(對於PostgreSQL)運行Sails.js的beta版本(v0.10.0-rc3),以便通過Waterline ORM獲得關聯功能。 我正在嘗試根據不同的訪問級別創建基於角色的授權用戶模型。 用戶到角色關聯是一對多的。 我的模特是:

API /模型/ user.js的

module.exports = {

  attributes: {
    firstName: {
      type: 'string',
      required: true
    },
    lastName: {
      type: 'string',
      required: true
    },
    fullName: function() {
      return this.firstName + " " + this.lastName;
    },
    email: {
      type: 'email',
      required: true,
      unique: true
    },
    encryptedPassword: {
      type: 'string'
    }, 
    role: {
      model: 'role'
    },
    groups: {
      collection: 'group',
      via: 'users'
    }
  },  

  toJSON: function() {
    var obj = this.toObject();
    delete obj.password;
    delete obj.confirmation;
    delete obj._csrf;
    return obj;
  },

  beforeCreate: function (values, next) {
    // Makes sure the password and password confirmation match
    if (!values.password || values.password != values.confirmation) {
      return next({err: ['Password does not match password confirmation.']});
    }

    // Encrypts the password/confirmation to be stored in the db
    require('bcrypt').hash(values.password, 10, function passwordEncrypted(err, encryptedPassword) {
      values.encryptedPassword = encryptedPassword;

       next();
    });
  }
};

API /模型/ Role.js

module.exports = {

  attributes: {
    name: {
      type: 'string',
      required: true,
      unique: true
    },
    users: {
      collection: 'user',
      via: 'role'
    },
    permissions: {
      collection: 'permission',
      via: 'roles',
      dominant: true
    }
  }
};

我知道Waterline還不支持通過關聯 ,但我仍然可以訪問與用戶關聯的角色名稱,對嗎? 例如: user.role.name我現在能夠檢索角色名稱的唯一方法是對角色對象進行第二次查詢。

要訪問關聯模型,您必須在查詢主模型時populate關聯,例如:

User.findOne(1).populate('role').exec(function(err, user) {

    if (err) {throw new Error(err);} 
    console.log(user.role.name);

}

協會文檔在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM