又名“has one”
一对一关联表示一个模型只能与另一个模型关联。为了让模型知道它与哪个其他模型关联,必须在一个记录上包含一个外键,并在其上加上一个unique
数据库约束。
目前在 Waterline 中处理这种关联有两种方法。
在这个例子中,我们将一个Pet
与一个User
关联起来。User
只能拥有一个Pet
,而一个Pet
只能拥有一个User
。但是,为了在这个例子中从两边查询,我们必须在User
模型中添加一个collection
属性。这允许我们同时调用User.find().populate('pet')
和Pet.find().populate('owner')
。
这两个模型将通过更新Pet
模型的owner
属性来保持同步。添加unique
属性确保数据库中每个owner
只存在一个值。缺点是,当从User
端填充时,你总是会得到一个数组。
// myApp/api/models/Pet.js
module.exports = {
attributes: {
name: {
type: 'string'
},
color: {
type: 'string'
},
owner:{
model:'user',
unique: true
}
}
}
// myApp/api/models/User.js
module.exports = {
attributes: {
name: {
type: 'string'
},
age: {
type: 'number'
},
pet: {
collection:'pet',
via: 'owner'
}
}
}
在这个例子中,我们将一个Pet
与一个User
关联起来。User
只能拥有一个Pet
,而一个Pet
只能拥有一个User
。但是,为了从两边查询,在User
模型中添加了一个model
属性。这允许我们同时调用User.find().populate('pet')
和Pet.find().populate('owner')
。
请注意,这两个模型不会保持同步,因此当更新一方时,必须记住也要更新另一方。
// myApp/api/models/Pet.js
module.exports = {
attributes: {
name: {
type: 'string'
},
color: {
type: 'string'
},
owner:{
model:'user'
}
}
}
// myApp/api/models/User.js
module.exports = {
attributes: {
name: {
type: 'string'
},
age: {
type: 'number'
},
pet: {
model:'pet'
}
}
}