WazEloquent is designed to deal with database without writing custom querys on your own. This package is built on top of Sqflite package and inspired by Laravel eloquent.
-
Install package
$ flutter pub add wazeloquent
-
Extend eloquent and configure required methods
e.g
class UserEloquent extends Eloquent {
@override
List<String> get columns => ['id','name','password','createdAt','updatedAt'];
@override
String get getPrimaryColumn => 'id';
@override
String get tableName => 'users';
}
-
Create table before using eloquent
For creating table, you can easily do it by registering onOpen, OnCreate methods of DB class.
For more information about creating table, please consult sqflite documentaion.
import 'package:wazeloquent/wazeloquent.dart' show DB;
void main(){
var db = DB.instance;
db.setDbVersion(1);
db.setFileName('example.db');
db.onCreate([
Future(() {
return (Database db, int) async {};
}),
]);
db.onOpen([
Future((){
return (Database db)async{
}),
]);
db.onConfigure([]);
db.onUpgrade([]);
db.onDowngrade([]);
runApp(const MyApp());
}
I would like to suggest you to have static variable in your eloquent. For example, see below.
class UserEloquent extends Eloquent {
static Future<Function(Database)> onOpen = Future(() {
return (Database db) async {
await DB.createTable(db, tableName: 'users',columns: {
'id': [ColumnType.idType],
'name': [ColumnType.stringType, ColumnType.notNull],
'password': [ColumnType.stringType, ColumnType.notNull],
'createdAt': [ColumnType.stringType, ColumnType.notNull],
'updatedAt': [ColumnType.stringType, ColumnType.notNull],
});
};
});
static Future<Function(Database, int)> onCreate = Future(() {
return (Database db, int version) async {
await DB.createTable(db, tableName: 'users',columns: {
'id': [ColumnType.idType],
'name': [ColumnType.stringType, ColumnType.notNull],
'password': [ColumnType.stringType, ColumnType.notNull],
'createdAt': [ColumnType.stringType, ColumnType.notNull],
'updatedAt': [ColumnType.stringType, ColumnType.notNull],
});
};
});
}
Note that You can use sqflite table creating technique .i.e,
await db.execute(
'CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT, value INTEGER, num REAL)');
Or You can use DB.createTable() method.
Feel free to use whatever you feel like XD
Then use them like
void main() {
DB.instance.onCreate([UserEloquent.onCreate]);
DB.instance.onOpen([UserEloquent.onOpen]);
runApp(const MyApp());
}
Then you are ready to use eloquent.
-
Using existing db
In order to use existing db, you can specify file path and file name. For example,
import 'package:path_provider/path_provider.dart';
var path = await getApplicationDocumentsDirectory();
var dir = path.absolute.path + '/test';
db.setFilePath(dir, shouldForceCreatePath: true);
db.setFileName('example.db');
Available methods are as follows.
-
where
Specify 'where' conditions in query.
Always include get() method at the end of query. Otherwise query will not be executed.
var userEloquent = UserEloquent();
userEloquent.where('name','john').get();
You can also specify which operator to use when querying. For example
userEloquent.where('name','john',operator:Operator.notEqual).get();
userEloquent.where('name','%j%',operator:Operator.like).get();
userEloquent.where('name','john').where('createdAt','2022-05-03',operator:Operator.greaterThan).get();
Available operators are
Operator.equal
Operator.greaterThan
Operator.lessThan
Operator.notEqual
Operator.like
Operator.notLike
Operator.inArray
Operator.notInArray
-
whereIn
Get all records of which column include any of the provided values.
var userEloquent = UserEloquent();
userEloquent.whereIn('id',[1,2,4]).get();
-
whereNotIn
Get all records of which column does not include any of the provided values.
var userEloquent = UserEloquent();
userEloquent.whereNotIn('id',[1,2,4]).get();
-
orderBy
Sort rows in either descending or ascending order.
var userEloquent = UserEloquent();
userEloquent.orderBy('name').get();
userEloquent.orderBy('name',sort:Sort.descending).get();
-
orderByDesc
Sort rows in descending order.
var userEloquent = UserEloquent();
userEloquent.orderByDesc('name').get();
-
groupBy
Group rows by column.
var userEloquent = UserEloquent();
userEloquent.groupBy('name').get();
-
groupByDesc
Group rows by column in descending order.
var userEloquent = UserEloquent();
userEloquent.groupByDesc('name').get();
-
latest
Get latest row related to primary key. You can specify the column name.
var userEloquent = UserEloquent();
userEloquent.latest().get();
userEloquent.latest(columnName:'name').get();
-
take
Limit the number of rows in result.
var userEloquent = UserEloquent();
userEloquent.where('name','%j%',operator:Operator.like).orderByDesc('name').take(1).get();
-
skip
Skip a given number of results.
var userEloquent = UserEloquent();
userEloquent.where('name','%j%',operator:Operator.like).orderByDesc('name').skip(1).take(10).get();
-
distinct
Get unique column values.
var userEloquent = UserEloquent();
userEloquent.distinct(['name']).get();
-
all
Return all rows from table.
var userEloquent = UserEloquent();
userEloquent.all();
userEloquent.orderBy('name').limit(1).all();
-
get
Final execution of query is performed by issuing this method.
var userEloquent = UserEloquent();
userEloquent.get();
-
first
Get the first object instead of using get, all, search.
var userEloquent = UserEloquent();
Map<String,Object?>? user = await userEloquent.first();
-
select
Select columns to be returned in results.
var userEloquent = UserEloquent();
userEloquent.select(['name']);
-
find
Find row by primary key.
var userEloquent = UserEloquent();
userEloquent.find(1);
-
search
Search rows.
var userEloquent = UserEloquent();
userEloquent.search('j');
userEloquent.where('country','UK').search('j');
userEloquent.search('j',searchableColumns:['name']);
-
create
Create a new row.
var userEloquent = UserEloquent();
userEloquent.create({'name':'John','password':'pass'});
-
createIfNotExists
Create a new row only if the value is not existed.
var userEloquent = UserEloquent();
userEloquent.createIfNotExists(check:{'name':'john'},create:{'password':'pass'});
-
updateOrCreate
Update data if exists and if not, create new row.
var userEloquent = UserEloquent();
userEloquent.updateOrCreate(check:{'name':'john'},inserts:{'password':'pass'});
-
update
Update rows.
var userEloquent = UserEloquent();
userEloquent.update({'name':'john'});
userEloquent.where('id',1).update({'name':'john'});
-
delete
Delete rows from table
var userEloquent = UserEloquent();
userEloquent.delete();
userEloquent.where('name','%j%',operator:Operator.like).delete();
-
deleteBy
Delete a row by primary key.
var userEloquent = UserEloquent();
userEloquent.deleteBy(1);
-
getDatabase
A static method to get database instance.
Database db = await UserEloquent.getDatabase;
This package is developed to help developers' lives better and save time.
I would be really happy if this package helps you. Cheers 🎉🎉