پایگاه داده — SQLite
فینچ از SQLite از طریق پکیج sqlite3 پشتیبانی میکند. API یکسانی با MySQL دارد — از MTable/MField* برای تعریف schema و از Sqler برای کوئریها استفاده کنید.
پیکربندی
FinchConfigs(
sqliteConfig: FinchSqliteConfig(
enable: true,
filePath: env['SQLITE_PATH'] ?? './app.sqlite',
),
)
تعریف جدول
// lib/db/sqlite_tables.dart
import 'package:finch/finch_sqlite.dart';
MTable postsTable = MTable(
tableName: 'posts',
fields: [
MFieldId(),
MFieldString(name: 'title', length: 255),
MFieldText(name: 'body'),
MFieldBool(name: 'published', defaultValue: false),
MFieldTimestamp(name: 'created_at', defaultNow: true),
],
);
کوئری با Sqler
API یکسانی با MySQL دارد — فقط از sqliteDriver یا sqliteDb به جای mysqlDriver استفاده کنید:
import 'package:finch/finch_sqlite.dart';
var sqler = Sqler(table: postsTable, db: sqliteDb);
// دریافت تمام پستهای منتشرشده
var posts = await sqler
.where('published', '=', true)
.orderBy('created_at', desc: true)
.get();
// درج
var id = await sqler.insert({
'title': 'اولین پست',
'body': 'محتوای پست...',
'published': true,
});
// بروزرسانی
await sqler.where('id', '=', id).update({'published': false});
// حذف
await sqler.where('id', '=', id).delete();
مهاجرت SQLite
از flag --sqlite برای دستور migrate استفاده کنید:
# اعمال مهاجرتهای SQLite
finch migrate --init --sqlite
# ساخت فایل مهاجرت SQLite جدید
finch migrate --create --name add_posts_table --sqlite
فایلهای مهاجرت در pathMigrationSQLite (پیشفرض: ./migrations_sqlite/) قرار دارند.
تفاوت با MySQL
| ویژگی | MySQL | SQLite |
|---|---|---|
| Driver import | finch_mysql.dart |
finch_sqlite.dart |
| پارامتر db | mysqlDb |
sqliteDb |
| flag مهاجرت | (بدون flag) | --sqlite |
| دایرکتوری مهاجرت | ./migrations |
./migrations_sqlite |
| ذخیرهسازی | سرور جداگانه | فایل محلی .sqlite |