search method
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());
}
}