一对一(One-to-One)

概述

一对一关联表示一个模型可能只与另一个模型关联。为了使模型知道它与其他哪些模型关联,外键必需包含在记录中。

一对一例子

在这个例子中,我们关联了一个 PetUser。在这种情况下 User 可能只有一个 Pet,但是 Pet 并不局限于单一 User

myApp/api/models/pet.js

  1. module.exports = {
  2. attributes: {
  3. name:'STRING',
  4. color:'STRING',
  5. owner:{
  6. model:'user'
  7. }
  8. }
  9. }

myApp/api/models/user.js

  1. module.exports = {
  2. attributes: {
  3. name:'STRING',
  4. age:'INTEGER',
  5. pony:{
  6. model: 'pet'
  7. }
  8. }
  9. }

使用 sails console

  1. sails> User.create({ name: 'Mike', age: 21}).exec(console.log);
  2. null { name: 'Mike',
  3. age: 21,
  4. createdAt: Thu Feb 20 2014 17:12:18 GMT-0600 (CST),
  5. updatedAt: Thu Feb 20 2014 17:12:18 GMT-0600 (CST),
  6. id: 1 }
  7. sails> Pet.create({ name: 'Pinkie Pie', color: 'pink', owner: 1}).exec(console.log)
  8. null { name: 'Pinkie Pie',
  9. color: 'pink',
  10. owner: 1,
  11. createdAt: Thu Feb 20 2014 17:26:16 GMT-0600 (CST),
  12. updatedAt: Thu Feb 20 2014 17:26:16 GMT-0600 (CST),
  13. id: 2 }
  14. sails> Pet.find().populate('owner').exec(console.log)
  15. null [ { name: 'Pinkie Pie',
  16. color: 'pink',
  17. owner:
  18. { name: 'Mike',
  19. age: 21,
  20. id: 1,
  21. createdAt: Thu Feb 20 2014 17:12:18 GMT-0600 (CST),
  22. updatedAt: Thu Feb 20 2014 17:12:18 GMT-0600 (CST) },
  23. createdAt: Thu Feb 20 2014 17:26:16 GMT-0600 (CST),
  24. updatedAt: Thu Feb 20 2014 17:26:16 GMT-0600 (CST),
  25. id: 2 } ]
  26. sails> User.find().populate('pony').exec(console.log)
  27. null [ { name: 'Mike',
  28. age: 21,
  29. createdAt: Thu Feb 20 2014 18:11:15 GMT-0600 (CST),
  30. updatedAt: Thu Feb 20 2014 18:11:15 GMT-0600 (CST),
  31. id: 2,
  32. pony: undefined } ]
  33. sails> User.update({name:'Mike'},{pony:2}).exec(console.log)
  34. null [ { name: 'Mike',
  35. age: 21,
  36. createdAt: Thu Feb 20 2014 17:12:18 GMT-0600 (CST),
  37. updatedAt: Thu Feb 20 2014 17:30:58 GMT-0600 (CST),
  38. id: 1,
  39. pony: 2 } ]
  40. sails> User.findOne(1).populate('pony').exec(console.log)
  41. null { name: 'Mike',
  42. age: 21,
  43. createdAt: Thu Feb 20 2014 17:12:18 GMT-0600 (CST),
  44. updatedAt: Thu Feb 20 2014 17:30:58 GMT-0600 (CST),
  45. id: 1,
  46. pony:
  47. { name: 'Pinkie Pie',
  48. color: 'pink',
  49. id: 2,
  50. createdAt: Thu Feb 20 2014 17:26:16 GMT-0600 (CST),
  51. updatedAt: Thu Feb 20 2014 17:26:16 GMT-0600 (CST),
  52. owner: 1 } }

注意事项

请查看 Waterline 文件取得这种类型的关联的更多资讯