where method

DatumQueryBuilder<T> where(
  1. String field, {
  2. dynamic isEqualTo,
  3. dynamic isNotEqualTo,
  4. dynamic isGreaterThan,
  5. dynamic isGreaterThanOrEqualTo,
  6. dynamic isLessThan,
  7. dynamic isLessThanOrEqualTo,
  8. String? contains,
  9. String? containsIgnoreCase,
  10. String? startsWith,
  11. String? endsWith,
  12. List? isIn,
  13. List? isNotIn,
  14. dynamic arrayContains,
  15. List? arrayContainsAny,
  16. String? matches,
  17. List? between,
})

Adds a filter condition to the query.

Supports dot notation for nested fields: 'user.profile.name'

Example: .where('age', isGreaterThan: 18)

Implementation

DatumQueryBuilder<T> where(
  String field, {
  dynamic isEqualTo,
  dynamic isNotEqualTo,
  dynamic isGreaterThan,
  dynamic isGreaterThanOrEqualTo,
  dynamic isLessThan,
  dynamic isLessThanOrEqualTo,
  String? contains,
  String? containsIgnoreCase,
  String? startsWith,
  String? endsWith,
  List<dynamic>? isIn,
  List<dynamic>? isNotIn,
  dynamic arrayContains,
  List<dynamic>? arrayContainsAny,
  String? matches,
  List<dynamic>? between,
}) {
  if (isEqualTo != null) {
    _filters.add(Filter(field, FilterOperator.equals, isEqualTo));
  }
  if (isNotEqualTo != null) {
    _filters.add(Filter(field, FilterOperator.notEquals, isNotEqualTo));
  }
  if (isGreaterThan != null) {
    _filters.add(Filter(field, FilterOperator.greaterThan, isGreaterThan));
  }
  if (isGreaterThanOrEqualTo != null) {
    _filters.add(
      Filter(
        field,
        FilterOperator.greaterThanOrEqual,
        isGreaterThanOrEqualTo,
      ),
    );
  }
  if (isLessThan != null) {
    _filters.add(Filter(field, FilterOperator.lessThan, isLessThan));
  }
  if (isLessThanOrEqualTo != null) {
    _filters.add(
      Filter(field, FilterOperator.lessThanOrEqual, isLessThanOrEqualTo),
    );
  }
  if (contains != null) {
    _filters.add(Filter(field, FilterOperator.contains, contains));
  }
  if (containsIgnoreCase != null) {
    _filters.add(
      Filter(field, FilterOperator.containsIgnoreCase, containsIgnoreCase),
    );
  }
  if (startsWith != null) {
    _filters.add(Filter(field, FilterOperator.startsWith, startsWith));
  }
  if (endsWith != null) {
    _filters.add(Filter(field, FilterOperator.endsWith, endsWith));
  }
  if (isIn != null) {
    _filters.add(Filter(field, FilterOperator.isIn, isIn));
  }
  if (isNotIn != null) {
    _filters.add(Filter(field, FilterOperator.isNotIn, isNotIn));
  }
  if (arrayContains != null) {
    _filters.add(Filter(field, FilterOperator.arrayContains, arrayContains));
  }
  if (arrayContainsAny != null) {
    _filters.add(
      Filter(field, FilterOperator.arrayContainsAny, arrayContainsAny),
    );
  }
  if (matches != null) {
    _filters.add(Filter(field, FilterOperator.matches, matches));
  }
  if (between != null) {
    assert(between.length == 2, 'between requires exactly 2 values');
    _filters.add(Filter(field, FilterOperator.between, between));
  }
  return this;
}