书架js中的多个连接

时间:2016-09-10 19:14:19

标签: sql bookshelf.js

我试图使用书架作为我的ORM为商店制作API。 为了让事情变得安宁,我希望我的道路看起来像这样。 “/男子/夹克” 我的数据结构是这样的,为了做到这一点,我必须找到类别(男/女),所以我可以得到其相关部分(夹克,牛仔裤,帽子等),然后获得该部分的相关产品。数据是这样的,有2个部分行,其名称为夹克,但是一个a具有将类别链接到1(制造)而另一个链接到2(女性)的fk。

我在文档中发现了这一点,但它不会起作用(我猜)你只能在第一个相关的单个实体返回单个实体时链接相关的链接,在这种情况下我的类别有很多部分。

new Photo({id: 1}).fetch({
   withRelated: ['account']
  }).then(function(photo) {
   if (photo) {
  var account = photo.related('account');
  if (account.id) {
   return account.related('trips').fetch();
  }
 }
  });

在原始sql中,我的查询看起来像这样

SELECT * FROM sections
JOIN categories ON categories.id = sections.category_id
JOIN products ON products.section_id = sections.id
where categories.name = 'mens' AND sections.name = 'jackets';

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

创建Sections模型后,您可以使用类似这样的查询。

Sections.query(qb => {
qb.leftJoin('categories', 'sections.category_id', 'categories.id);
qb.leftJoin('products', 'sections.id', 'products.section_id);
qb.where('categories.name', 'men');
qb.andWhere('sections.name', 'jackets');
}.fetchOne({withRelated: 'products'});

答案 1 :(得分:0)

您可以直接通过帐户获取旅行,例如:

new Photo({id: 1}).fetch({
  withRelated: [
   { 'account': qb => qb.where(needed conditions) },
   'account.trips',
  ]
}).then(function(photo) {
    YOUR CODE
});

现在,您必须在使用之前检查.related('account').related('account').related('trips')是否为空

我希望它有所帮助:)