FDM / Dosya Veritabanı Haritalama
"Başlangıç dosya ve kontrolcüleri üzerinden tüm kontrolcü ve görünümlere veri gönderilebilir."
ZN Framework'te FDM (File Database Mapping) yani "Dosya Veritabanı Haritalama" adı vediğimiz sistem mevcuttur. Bu sistemin temel amacı dizin ve dosyaları kullanarak veritabanı şemasını oluşturmaktır. Böylece localde oluşturduğunuz projenize ait veritabanı yapısını sunucuya kolaylıkla aktarabilirsiniz. Bu oluşturma işlemleri Databases/ dizini içerisinde gerçekleşir. Bu dizinde 2 alt dizin daha vardır;
Actives/ | Aktif kullanılanacak veritabanı ve tablolar. |
Archives/ | Artık kullanılmayacak arşivlenecek veritabanı ve tablolar. |
Tasarlanan dizin ve dosyalardan oluşan veritabanı şemasının oluşturulması için 2 yol vardır;
● Yöntem çalıştırmak.
Generate::databases();
● Konsol üzerinden komut çalıştırmak.
php zerocore generate-databases
Bu yöntemlerden herhangi biriyle Databases/ dizinindeki dizin ve dosyaların veritabanı ve tablolara dönüşmesini sağlayabilirsiniz.
# Veritabanı Oluşturmak
Veritabanı oluşturmak için Databases/Actives/ dizini içine ExampleDatabase/ dizinini oluşturalım.
Bu işlemden sonra yukarıda anlatılan yollardan herhangi birini kullanıyıp sayfayı yenilediğinizde ExampleDatabase veritabanının oluştuğunu görebilirsiniz.
Generate::databases();
# Tabloları Oluşturmak
Tabloları oluşturmak için Databases/ActivesExampleDatabase/ dizinini içerisine Users.php ve UserProfiles.php oluşturup içeriğini aşağıdaki gibi dolduralım.
<?php return
[
'user' => [DB::varchar(100), DB::notNull()],
'email' => [DB::varchar(100), DB::notNull()]
];
<?php return
[
'user_id' => [DB::int(11), DB::notNull()],
'adress' => [DB::text()],
'phone' => [DB::varchar(11)]
];
Yukarıdaki kullanıma dikkat edilirse sanki DBForge::createTable() yönteminin 2. parametresine veri yolluyormuş gibidir. Dikkat edilmesi gereken bir diğer durum eğer tablolara ID değeri belirtilmezse sistem ID değerlerini kendisi oluşturur. Yukarıdaki kullanımlardan sonra belirtilen yöntemlerden birini kullanarak çalıştırırsanız tabloların ve veritabanlarının oluşturuğunu görebilirsiniz.
Generate::databases();
# Tabloları Güncellemek
Actives/ dizini içindeki tablolarda değişiklik yaptığınızda dosyanın değişiklikten önceki son hali Archives/ dizine o tablonun bağlı bulunduğu veritabanının ismiyle oluşturulan bir dizin içine kaydedilir. Aşağıdaki dosyamızı güncelleyelim.
<?php return
[
'user' => [DB::varchar(100), DB::notNull()],
'email' => [DB::varchar(100), DB::notNull()],
'status' => [DB::int(1), DB::null()],
'name' => [DB::varchar(200), DB::null()]
];
Kodumuzu çalıştıralım.
Generate::databases();
Yukarıdaki görselden anlaşılacağı üzere sistem otomatik olarak dosyanın değiştirilmeden önceki son halinin kopyasını oluşturulmuştur. Dosyanın sonuna ise time() yönteminin ürettiği zaman değerini eklemiştir.
# Tabloyu Silmek
Tabloyu silmek için Actives/ kesilip Archives/ dizinine yapıştırılmalıdır. Mesela ExampleDatabase/UserProfiles.php dosyasını Archives/ dizini içerisine taşıyalım.
Generate::databases();
# Arşivlemek
Yukarıdaki veritabanı tablolarından birinde değişiklik yaparsanız değişiklik yapılan dosya Archives/ dizine otomatik olarak tablo_adi_zamandamgasi.php şeklinde oluşturulur. Böylece değişiklikleri yapmadan önceki dosya içeriğini arşivlemiş olursunuz. Veya dosyayı silmeniz gerekirse o dizin ve dosyayı Archives/ dizinine taşımanız gerekir. Silme veya değişiklikler için versiyonlama yoluna gitmeniz ileriye dönük size büyük katkı sağlayacaktır.
Örnek olarak yukarıdaki UserProfiles tablosuna yeni bir kolon ekleyelim. Bu işlem için aşağıdaki adımları takip edin.
● ExampleDatabase/UserProfiles.php dosyasına gerekli kolonu ekleyin.
● Belirtilen yollardan biriyle sayfayı tekrar çalıştırın.
● Archives/ExampleDatabase dizininde UserProfies_1490705285.php gibi bir dosyanın oluşturuğunu görebilirsiniz.
● Eğer dosyayı silecekseniz bu dosyayı Actives/ dizininden kesip Archives/ dizinine taşımanız gerekir.
● 2. adımı tekrarladığınızda dosyanın silindiğini görebilirsiniz.
<?php return
[
'user_id' => [DB::int(11), DB::notNull()],
'adress' => [DB::text()],
'first_name' => [DB::varchar(100)],
'last_name' => [DB::varchar(100)],
'gender' => [DB::int(1)],
'phone' => [DB::varchar(11)]
];
Değişiklikleri otomatik olarak uygulatmamızın nedeni dosyalardaki her bir değişiklikte arşivlemeniz ve ileriye dönük kullanım için önemli veri elde etmenizdir. Yani bu sistemin temel felsefesi oluştur ve arşivledir. Arşivlenen dosyanın içeriği de aşağıdaki gibidir.
<?php return
[
'user_id' => [DB::int(11), DB::notNull()],
'adress' => [DB::text()],
'phone' => [DB::varchar(11)]
];