代码之家  ›  专栏  ›  技术社区  ›  LongHike

bookshelf js如何通过关联记录上的匹配条件查询记录?

  •  0
  • LongHike  · 技术社区  · 6 年前

    假设我有一个书架,一对多关系人=>汽车,在哪里

    伪代码

    # Person
    
    hasMany: cars
    id
    name
    
    # Car
    belongsTo: person
    id
    make
    

    现在我想找到所有拥有“漫游者”的人。

    我天真的希望是这样的,但显然行不通:

    Person.query({ where: { cars: { make: 'Rover' } } } )
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   LongHike    6 年前

    看起来没有真正优雅的解决方案。通过使用连接,我终于解决了我的问题。

    如下所示:

    Person.query((qb) => {
      qb.join('cars', 'cars.person_id', 'person.id');
      // no that the cars are joined,
      // they are available for querying
      qb.where({'cars.make': 'Rover'});
    })
    .then((result) => {
      // do stuff
    })
    .catch((err) => {
      // always catch errors
      console.error(err);
    });
    

    当您想要查询具有透视/中间表的多对多关系的对应项时,它会变得更复杂一些,但这可能有助于开始。

        2
  •  0
  •   zerosand1s    6 年前

    您需要使用 withRelated 获取相关模型的选项。试试这个,

    Person.forge()
      .fetchAll({
          withRelated: [{
           cars: function(qb) {
              qb.where({make: 'Rover'})
           }
        }]
      })
      .then(function(persons) {
         //do something
      });
    

    文档中的更多内容 here