search method

  1. @override
Future<List<Map<String, Object?>>> search(
  1. String keyword, {
  2. List<String>? searchableColumns,
})

Search rows.

var user = User();

var query = await user.cars();
// get rows where any column has word 'j'.
await query.search('j');

// get rows where country has 'UK' and any other rows has 'j'.
await query.where('country','UK').search('j');

//specify searchable columns
await query.search('j',searchableColumns:['name']);

Implementation

@override
Future<List<Map<String, Object?>>> search(String keyword,
    {List<String>? searchableColumns}) async {
  if (query == null) {
    throw Exception('cannot query without relationship');
  }
  String _key = '%$keyword%';
  String? selectedColumns = getSelectedColumns(table: 'table1');
  String table = query!.split(' ')[0];
  String q = 'SELECT ${selectedColumns ?? 'table1.*'} from ' + query!;
  try {
    List<String>? _usedColumns;
    var _wheres = getWhereColumns();
    if (_wheres.isNotEmpty) {
      _usedColumns = _wheres.map((e) => e.columnName).toList();
    }
    if (searchableColumns != null && searchableColumns.isNotEmpty) {
      for (var column in searchableColumns) {
        where(column, _key, operator: Operator.like, conjuncation: 'or');
      }
    } else {
      for (var column in await eloquent.getColumnNames(table: table)) {
        if (_usedColumns != null && _usedColumns.contains(column)) {
          continue;
        }
        where(column, _key, operator: Operator.like, conjuncation: 'or');
      }
    }
    q = generateQuery(q, table: 'table1');
    Database _db = await eloquent.getDatabase;
    resetAll();
    return await _db.rawQuery(q);
  } catch (e) {
    throw Exception('Generated query: "$q" \n' + e.toString());
  }
}