Isar Plus

Şema

Isar koleksiyonlarıyla veri modellerinizi tanımlayın

Şema

Isar ile uygulama verinizi sakladığınızda koleksiyonlarla çalışırsınız. Koleksiyon, veritabanı tablosu gibidir ve yalnızca tek bir Dart nesne türünü içerebilir.

Koleksiyonun Anatomisi

Her Isar koleksiyonunu @collection veya @Collection() ile anotasyonlayarak tanımlarsınız.

@collection
class User {
  Id? id;

  String? firstName;

  String? lastName;
}

Bir alanı kalıcı kılmak için Isar'ın ona erişebilmesi gerekir. Alanı public yapın veya getter/setter sağlayın.

Veri Türleri

Isar aşağıdaki veri türlerini destekler:

Primitif Türler

@collection
class PrimitiveTypes {
  PrimitiveTypes(this.id);

  final int id;

  bool? boolValue;
  int? intValue;
  double? doubleValue;
  DateTime? dateValue;
  String? stringValue;
}

Listeler

@collection
class ListTypes {
  ListTypes(this.id);

  final int id;

  List<bool>? boolList;
  List<int>? intList;
  List<double>? doubleList;
  List<DateTime>? dateList;
  List<String>? stringList;
}

Listeler null değer içeremez. Bunun yerine nullable türler kullanın.

Enum'lar

enum Status { active, inactive, pending }

@collection
class Task {
  Task(this.id);

  final int id;

  @enumerated
  Status? status;

  @Enumerated(EnumType.ordinal)
  Status? ordinalStatus;

  @Enumerated(EnumType.name)
  Status? namedStatus;
}

Enum değerinin indeksini saklar (varsayılan).

// Status.active = 0
// Status.inactive = 1
// Status.pending = 2

Enum değerinin adını String olarak saklar.

// Status.active = 'active'
// Status.inactive = 'inactive'

Enum içinde tanımlanan özel değeri saklar.

enum Status {
  @EnumValue(1) active,
  @EnumValue(2) inactive,
  @EnumValue(3) pending,
}

Gömülü Nesneler

@embedded
class Address {
  String? street;
  String? city;
  String? country;
}

@collection
class Person {
  Person(this.id);

  final int id;

  String? name;

  Address? address;

  List<Address>? addresses;
}

Id'ler

Her koleksiyon nesneleri benzersiz tanımlamak için bir Id alanına ihtiyaç duyar.

@collection
class User {
  User(this.id);

  final int id;

  String? name;
}

Otomatik artan ID'ler için, ekleme sırasında collection.autoIncrement() metodunu kullanın:

isar.write((isar) {
  final user = User(isar.users.autoIncrement());
  isar.users.put(user);
});

Özel ID'ler

@collection
class User {
  User(this.id);

  final int id; // ID'yi siz yönetirsiniz

  String? name;
}

Alan Anotasyonları

@Index

Sorgu performansını iyileştirmek için indeks oluşturun:

@collection
class User {
  User(this.id);

  final int id;

  @Index()
  String? email;

  @Index(type: IndexType.value)
  String? username;

  @Index(caseSensitive: false)
  String? name;
}

@Ignore

Alanları depolamadan hariç tutun:

@collection
class User {
  User(this.id);

  final int id;

  String? name;

  @ignore
  String? temporaryData; // Saklanmaz
}

@Name

Veritabanında alan adını değiştirin:

@collection
class User {
  User(this.id);

  final int id;

  @Name("user_name")
  String? name;
}

@Size

String boyutunu sınırlandırın:

@collection
class User {
  User(this.id);

  final int id;

  @Size(max: 100)
  String? shortText;

  @Size(max: 1000)
  String? longText;
}

Bileşik İndeksler

Birden fazla alan üzerinde indeks oluşturun:

@collection
@Index(composite: ['lastName', 'age'])
class User {
  User(this.id);

  final int id;

  String? firstName;

  String? lastName;

  int? age;
}

İlişkileri Modellemek

Isar Plus v4, çalışma zamanı link tipleri yerine gömülü nesneler ve açık ID alanlarıyla ilişkileri modeller. Depodan alınmış örnekler görmek için İlişkiler sayfasına göz atın.

Migration

Isar çoğu durumda şema geçişlerini otomatik yönetir:

  • Yeni alan eklemek
  • Alan kaldırmak
  • Alan türünü değiştirmek (veri kaybıyla)
  • İndeks eklemek/kaldırmak

Var olan bir alanın türünü değiştirmek, o alan için veri kaybına yol açar.

Sonraki Adımlar

Son Güncelleme