Node.js 书架FJS限制与FetchAll中的相关功能不起作用

Node.js 书架FJS限制与FetchAll中的相关功能不起作用,node.js,backbone.js,bookshelf.js,Node.js,Backbone.js,Bookshelf.js,我对盒子和盒子状态之间的关系有很多看法 我想抓取我所有的箱子及其最新状态,因此这是我的查询: new Box() .orderBy('id', 'ASC') .fetchAll({ withRelated: [{ 'states' : function(qb) { qb.limit(1) .orderBy('id', 'DESC'); }

我对盒子和盒子状态之间的关系有很多看法

我想抓取我所有的箱子及其最新状态,因此这是我的查询:

new Box()
    .orderBy('id', 'ASC')
    .fetchAll({
        withRelated: [{
            'states' :  function(qb) {
                qb.limit(1)
                    .orderBy('id', 'DESC');
            }
        }]
    })
    .then(function (boxes) {
        res.json(boxes);
    });
这将返回所有框,但只有最后一个框有一个关系;一切都没有关系


非常感谢您的帮助。

好吧,这和预期的效果差不多。如果您调试您的解决方案,您将看到类似这样的内容,我给您举的示例与您的示例具有相同的关系-一个城镇,多个地址:

选择addresses.*从addresses.town_id所在的地址按id限制1分组1、2、3、4

这基本上就是选择一个!所有实例的相关模型地址1,2,3,4段中的addresses.town_id

因此,基本上你需要做的是获得主要结果,并在每个结果上进行相关操作

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);
    });

});

我不确定是否有更好的选择。。。这很管用。

完成这个最新版本的书架的最佳方法是使用收藏。虽然withRelated在.fetchAll中不可用,但在集合上使用.fetch时它可用。看