Object to Relational Mapping veya Türkçe ismiyle Nesne-İlişkisel Eşleme veriyi uyumlu olmayan nesneye yönelik programlama dili tip sistemine çevirmek için kullanılan bir yazılım tekniğidir.
ORM ile bir nesneye yönelik programlama dilinde kullanılabilecek "sanal nesne veritabanı" oluşturulur. Bu şekilde programcı, düşük düzeydeki veritabanı işlemleri ve veritabanından gelen uyumsuz veri tipleri ile uğraşmadan kullandığı programlama dilinin sınıfları ile veritabanı üzerinde işlemler yapabilir.
ORM’den bahsederken çoğu kişi Object-Relational Mappingteniği uygulayan kütüphaneleri referans alır, bu yüzden ORM olarak ifade edilir. Bir ORM kütüphanesi, veriler ile oynama yapabilmek için ihtiyacınız olan kodları içeren, yazılım dilinizde yazlan sıradan bir kütüphanedir. Yani artk SQL kullanmazsınız, kullandığınız dildeki obje ile doğrudan etkileşimde olursunuz.
2. ORM Nedir?
Object-relational mapping
Object to Relational Mapping veriyi
uyumlu olmayan nesneye yönelik
programlama dili tip sistemine çevirmek
için kullanılan bir yazılım tekniğidir.
3. Genel Bakış
String sql = "SELECT ... FROM persons WHERE id = 10";
DbCommand cmd = new DbCommand(connection, sql);
Result res = cmd.Execute();
String name = res[0]["FIRST_NAME"];
4. Genel Bakış - ORM API
Person p = repository.GetPerson(10);
String name = p.getFirstName();
6. ORM kullanımı zaman
kazancı sağlar
● Veri modelinizi tek bir yerde yapın, bakımı,
güncellemesi ve tekrar kullanımı daha
kolaydır.
● Sizi MCV kodlamaya zorlar, sonuçta
kodunuz daha temiz yapar.
● SQL yazmak zorunda kalmazsınız.
7. ORM Kütüphanesi
kullanımı daha esnektir
● Yazdığınız dile uygundur.
● DB sistemini soyutlar, istediğinizde
değiştirebilirsiniz.
● Model, uygulamanızın geri kalanıyla zayıf bağlıdır,
değiştirebilir ve başka yerlerde kullanabilirsiniz.
● OOP kullanımının avantajlarını sorunsuzca
kullanırsınız.
8. ORM sorunlu olabilir
● ORM kütüphaneleri kolay araçlar değildir.
● Kurulumunu yapmanız gerekir.
● Bazen büyük projelerde kendi SQL’iniz daha iyi
olabilir.
● Yeni programcılar için tuzak olabilir.
29. One To One: Eloquent
class User extends Model
{
public function phone()
{
return $this->hasOne(Phone::class);
}
}
class Phone extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
30. One To One: Kullanım
$user = User::find(1);
$user->phone()->getResults();
//object(RelationsPhone)
$phone = Phone::find(1);
$phone->user()->getResults();
//object(RelationsUser)
31. One To Many: ER Model
Birden çoğa bağlantı. (1:n)
32. One To Many: Eloquent
class User extends Model
{
public function posts()
{
return $this->hasMany(Post::class);
}
}
class Post extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
33. One To Many: Kullanım
$user = User::find(1);
$user->posts()->getResults();
//object(IlluminateDatabaseEloquentCollection)
$post = Post::find(1);
$post->user()->getResults();
//object(RelationsUser)
35. Many To Many: Eloquent
class User extends Model
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
}
class Role extends Model
{
public function users()
{
return $this->belongsToMany(User::class);
}
}
36. Many To Many: Kullanım
$user = User::find(1);
$user->roles()->getResults();
//object(IlluminateDatabaseEloquentCollection)
$role = Role::find(1);
$role->users()->getResults();
//object(IlluminateDatabaseEloquentCollection)
38. Polymorphic Relations
class User extends Model
{
public function permissions()
{
return $this->morphOne(Permission::class, 'permissible');
}
}
class Permission extends Model
{
public function permissible()
{
return $this->morphTo();
}
}
41. Has Many Through: Eloquent
class Service extends Model
{
public function posts()
{
return $this->hasManyThrough(Post::class, User::class);
}
}
class User extends Model
{
public function posts()
{
return $this->hasMany(Post::class);
}
}
class Post extends Model
{
}
42. Has Many Through: Kullanım
$service = Service::find(1);
$service->posts()->getResults();
//object(IlluminateDatabaseEloquentCollection)