我有一张表示用户个人资料的表格。这个简介可以跟随其他人的个人资料。
这是我的profil.json
的一部分"relations": {
"followers": {
"type": "hasMany",
"model": "Profil",
"foreignKey": "publisherId",
"keyThrough": "subscriberId",
"through": "Subscribing"
},
"subscribings": {
"type": "hasMany",
"model": "Profil",
"foreignKey": "subscriberId",
"keyThrough": "publisherId",
"through": "Subscribing"
},
这很好,但现在我想知道订阅个人资料的日期。
所以我更新了subscribing.json关系表以添加日期
{
"name": "Subscribing",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"subscriptionDate": {
"type": "date",
"required": true,
"default": "$now"
}
},
"validations": [],
"relations": {
"subscriber": {
"type": "belongsTo",
"model": "Profil",
"as": "subscriber"
},
"publisher": {
"type": "belongsTo",
"model": "Profil",
"as": "publisher"
}
},
"acls": [],
"methods": {}
}
现在,我希望能够查询此配置文件的数据,同时可以在同一时间检索订阅日期。理想情况下,我会保持关系表不公开。 感谢
答案 0 :(得分:0)
您可以使用“include”过滤器将关系数据添加到响应中。 因此,在您的情况下,这应该得到用户的'订阅':
Profil.find({include: 'subscribings'}, function() { /* ... */ });
答案 1 :(得分:0)
尝试手动添加订阅者。
首先,添加subscribing.json
"scope": {
"include": [
"subscriber"
]
}
接下来,在profil.js
中创建钩子观察者(我使用lodash进行映射,但您可以使用您喜欢的库)
Profil.observe('loaded', function(ctx, next){
const Subscribing = Profil.app.models.Subscribing;
Subscribing.find({
where: {
publisherId: ctx.data.id
}
}, function (err, subscribings) {
if(err) return next(err)
ctx.data.subscribings = _.map(subscribings, function(subscribing){
return {
date: subscribing.subscriptionDate,
subscriber: subscribing.subscriber
}
});
next();
});
})
一切都好!如果您遇到问题,请尝试此操作并发表评论。
答案 2 :(得分:0)
@rigobcastro在回答中提到了一种方式。
或者,您需要创建一个新关系。
我们称之为SubscribingMetaData
在你的profile.json中,添加以下
"subscribingMetaData": {
"type": "hasMany",
"model": "Subscribing",
"foreignKey": "subscriberId"
}
现在您可以将其包含在您的查询中,
Profil.find({include: ['subscribings', 'subscribingMetaData']}, function() { /* ... */ });
// process subscribingMetaData and map subscriptionDate with subscribings to get desired output.