我在belongsTo
和boxes
之间有box_states
到new Box()
.orderBy('id', 'ASC')
.fetchAll({
withRelated: [{
'states' : function(qb) {
qb.limit(1)
.orderBy('id', 'DESC');
}
}]
})
.then(function (boxes) {
res.json(boxes);
});
的关系。
我想抓住他们最新状态的所有盒子,所以这是我的问题:
.container {
width: 50%;
border: 1px solid black;
text-align: center;
display: inline-block;
position: relative;
}
这将返回所有框,但只有最后一个框有一个关系;一切都没有关系。
帮助将不胜感激。
答案 0 :(得分:2)
嗯,这很有效。如果你调试你的解决方案,你会看到这样的事情(我给你的例子,它与你的例子有关 - 一个城镇,很多地址):
select "addresses".* from "addresses" where "addresses"."town_id" in (1, 2, 3, 4) group by "id" limit 1
这样做基本上只为所有实例(address
段)选择一个(!)相关模型(addresses.town_id in (1,2,3,4)
)。
所以基本上你需要做的是预测主要结果并在每个结果上withRelated
。
new Town().fetchAll().then(function(towns) {
var my_towns_with_only_last_address = [];
Promise.map(towns.toJSON(), function(town) {
return new Town({
id: town.id
}).fetch({
withRelated: [{
'address': function(qb) {
qb.limit(1);
qb.orderBy('id', 'desc');
}
}]
}).then(function(result) {
return my_towns_with_only_last_address.push(result.toJSON());
});
}).then(function() {
res.json(my_towns_with_only_last_address);
});
});
我不确定是否有更好的选择......这很有效。
答案 1 :(得分:0)
现在最好的方法(Bookshelf的最新版本)是使用Collection。虽然withRelated
中没有.fetchAll()
,但在集合上使用.fetch()
时可以使用 id <- c(1,1,2,2,2,2,2,3,3,4,4,5,5,5)
dist <- c(0,1,1,0,2,15,0,4,4,0,5,5,16,2)
data <- data.frame(id, dist )
。见http://bookshelfjs.org/#Collection-instance-fetch