Skip to content

Filtering Queries via Intermediate Table Columns

You can also filter the results returned by BelongsToManyColumn relationship queries using the wherePivot, wherePivotIn, wherePivotNotIn, wherePivotBetween, wherePivotNotBetween, wherePivotNull, and wherePivotNotNull methods when defining the relationship:

typescript
@Table({
  tableName: 'users'
})
class User extends Model {
  @BelongsToManyColumn({
    related: forwardRef(() => Role),
    onQuery: (q => {
      q.wherePivot('approved', 1);
    })
  })
  role
}
typescript
@Table({
  tableName: 'users'
})
class User extends Model {
  @BelongsToManyColumn({
    related: forwardRef(() => Role),
    onQuery: (q => {
      q.wherePivotIn('priority', [1, 2]);
    })
  })
  role
}
typescript
@Table({
  tableName: 'users'
})
class User extends Model {
  @BelongsToManyColumn({
    related: forwardRef(() => Role),
    onQuery: (q => {
      q.wherePivotNotIn('priority', [1, 2]);
    })
  })
  role
}
typescript
@Table({
  tableName: 'users'
})
class User extends Model {
  @BelongsToManyColumn({
    related: forwardRef(() => Role),
    onQuery: (q => {
      q.as('subscriptions').wherePivotBetween('created_at', ['2020-01-01 00:00:00', '2020-12-31 00:00:00']);
    })
  })
  role
}
typescript
@Table({
  tableName: 'users'
})
class User extends Model {
  @BelongsToManyColumn({
    related: forwardRef(() => Role),
    onQuery: (q => {
      q.as('subscriptions').wherePivotNotBetween('created_at', ['2020-01-01 00:00:00', '2020-12-31 00:00:00'])
    })
  })
  role
}
typescript
@Table({
  tableName: 'users'
})
class User extends Model {
  @BelongsToManyColumn({
    related: forwardRef(() => Role),
    onQuery: (q => {
      q.as('subscriptions').wherePivotNull('expired_at');
    })
  })
  role
}
typescript
@Table({
  tableName: 'users'
})
class User extends Model {
  @BelongsToManyColumn({
    related: forwardRef(() => Role),
    onQuery: (q => {
      q.as('subscriptions').wherePivotNotNull('expired_at');
    })
  })
  role
}

Released under the MIT License.