پایگاه داده — 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