Skip to content

Filter across relation (joins) #18

Closed
@techniq

Description

@techniq

It would be very useful if you could apply a join and filter across the join . For example, with the following resources I want to find all the races at a specific address:

exports.Race = db.store.defineResource({
  name: 'race',
  relations: {
    belongsTo: {
      address: {
        localField: 'address',
        localKey: 'address_id'
      }
    },
  }
});

exports.Address = db.store.defineResource({
  name: 'address',
  relations: {
    hasMany: {
      race: {
        localField: 'races',
        foreignKey: 'address_id'
      }
    }
  }
});

Executing sqlAdapter.findAll(models.Race, { "address.city": "New York" }); would produce:

select * from race
join address ON race.address_id = address.id AND address.city = 'New York'

The equivalent knex query would be:

knex.select('*').from('race').join('address', function() {
  this.on('address.id', '=', 'race.address_id').on('address.city', '=', knex.raw('?', ['New York']))
})

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions