书架上的where子句联接

书架上的where子句联接

我刚刚开始使用bookshelfJS,但找不到有关如何执行以下操作的明确答案。

考虑一下我有下表:

product
--------
id


product_account
--------
id
product_id
account_id


collection
--------
id


collection_product_account
--------
collection_id
product_account_id


一个集合中可以有很多产品。

我想做以下

SELECT pa.*, p.* FROM product_account pa
INNER JOIN collection_product_account cp ON cp.product_account_id = pa.id
INNER JOIN product p ON p.product_account_id = pa.product_id
WHERE cp.collection_id = ?


我将如何传递集合ID,并返回完整的product_accounts列表,然后从中获取产品?

作为参考,如果我要查询的是product_account_id,我可以这样做

new productAccountModel()
.where({account_id: 1})
.fetchAll({withRelated: ['product']})
.then(function(productAccounts)
{
  return productAccounts.toJSON());
});

最佳答案

我假设这是您的模型:

var Product = bookshelf.Model.extend({
    tableName: 'product',
    collections: function() {
        return this.belongsToMany(Collection);
    }
});

var Collection = bookshelf.Model.extend({
    tableName: 'collection',
    products: function() {
        return this.belongsToMany(Product);
    }
});


然后,您必须稍微切换逻辑。说了new Product(),就无法按相关表查询此内容。但是您可以像这样切换它:

new Collection({id: 1}).fetch({
    withRelated: ['products']
}).then(function(result) {
    res.json(result.toJSON());
});


这有帮助吗?

更新:

如有必要,您还可以附加要附加的模型中的关系,即:

new Collection({id: 1}).fetch({
    withRelated: ['products.company']
}).then(function(result) {
    res.json(result.toJSON());
});

关于javascript - 书架上的where子句联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29874599/

10-12 01:58