一对多(One-to-Many)

概述

一对多关联表示一个模型可以关联到许多其他模型。要建立这种关联,要加入一个虚拟属性 collection 到模型。在一对多关联中,一边必需有 collection 属性,另一边必需包含一个 modal 属性。这让「Many」那侧知道当使用 populate 时,它需要取得哪些记录。

因为你可能想要一个模型有多个一对多关联到另一个模型,collection 属性必需要有一个 via 键。这说明了哪一边的关联 modal 属性会用来提供记录。

一对多例子

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. pets:{
  6. collection: 'pet',
  7. via: 'owner'
  8. }
  9. }
  10. }

使用 sails console

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

注意事项

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