又称“拥有多个”
一对多关联表明一个模型可以与许多其他模型关联。要建立这种关联,需要使用collection
属性在模型中添加一个虚拟属性。在一对多关联中,“一”端必须具有collection
属性,“多”端必须包含model
属性。这使“多”端能够知道在使用populate
时需要获取哪些记录。
因为您可能希望一个模型对另一个模型具有多个一对多关联,所以在collection
属性上需要一个via
键。它表示关联“一”端的哪个model
属性用于填充记录。
// myApp/api/models/User.js
// A user may have many pets
module.exports = {
attributes: {
firstName: {
type: 'string'
},
lastName: {
type: 'string'
},
// Add a reference to Pets
pets: {
collection: 'pet',
via: 'owner'
}
}
};
// myApp/api/models/Pet.js
// A pet may only belong to a single user
module.exports = {
attributes: {
breed: {
type: 'string'
},
type: {
type: 'string'
},
name: {
type: 'string'
},
// Add a reference to User
owner: {
model: 'user'
}
}
};
现在,宠物和用户相互了解了,它们可以关联起来。为此,我们可以创建或更新宠物,使用用户的owner
值的 主键。
await Pet.create({
breed: 'labrador',
type: 'dog',
name: 'fido',
// Set the User's Primary Key to associate the Pet with the User.
owner: 123
});
现在Pet
已与User
关联,可以通过使用.populate()
方法来填充属于特定用户的所有宠物。
var users = await User.find().populate('pets');
// The users object would look something like the following
// [{
// id: 123,
// firstName: 'Foo',
// lastName: 'Bar',
// pets: [{
// id: 1,
// breed: 'labrador',
// type: 'dog',
// name: 'fido',
// user: 123
// }]
// }]