那里,
在进入hacky / cutom方式之前,我想知道是否有内置query
方式来检查空/非空多对多关系,因为我在Google和doc上都没有成功
如果我在文档中采用这个例子,我想想只有当他有一个Pet或Retrive a Pet而没有任何所有者通过查询时才能审阅用户。
// A user may have many pets
var User = Waterline.Collection.extend({
identity: 'user',
connection: 'local-postgresql',
attributes: {
firstName: 'string',
lastName: 'string',
// Add a reference to Pet
pets: {
collection: 'pet',
via: 'owners',
dominant: true
}
}
});
// A pet may have many owners
var Pet = Waterline.Collection.extend({
identity: 'pet',
connection: 'local-postgresql',
attributes: {
breed: 'string',
type: 'string',
name: 'string',
// Add a reference to User
owners: {
collection: 'user',
via: 'pets'
}
}
});
P.S。我知道如何在查询执行后过滤结果,而不是我要问的问题:)
答案 0 :(得分:3)
没有内置的东西(又名User.hasPet())或类似东西。所以简单的答案是否
如果我事先知道这些问题,我倾向于以这样的方式编写我的数据库,以便查询很快。 IE:用户架构将具有hasPets列。每当添加/移除宠物时,如果具有所有者,则回调会命中用户表以标记该字段。那么我可以查询User.findAll({hasPet:true})。
它有点多,但这取决于你需要的速度。
答案 1 :(得分:2)
这有点晚了,但我想告诉您,使用Waterline ORM生命周期功能很容易做到这一点。我已经完成了一些项目。基本上,使用beforeCreate和beforeUpdate函数来设置标志。对于您的用户,它可能看起来像......
span
然后您可以根据has_pet属性进行查询