Migrations / Göçler
"Basit bir konsol komutu ile projenin orijinal haline dokunmadan restorasyon çalışması yapabilirsiniz."
Bu bölümde göçlerin (migration) nasıl oluşturulup kullanılacağına yer vermeye çalıştık. Göçler genellikle DBForge:: sınıfının yaptığı tablo oluşturma, sütun ekleme gibi işlemleri yapar ancak tek farkı kodlar bir dosyada saklanır. Göç dosyaları up ve down olmak üzere iki fonksiyon içerir. Bunlardan up oluşturma işlemi down ise yapılan işlemi geri almak için kullanılır. Tabi burada bu işlemler yapılırken dosyalar versiyonlanarak oluşturulur ki hangi işlemin önce yapıldığı anlaşılır. Böylece projeniz taşındığında veritabanı dosyasını doğrudan taşımak yerine versiyonlanarak tutulan dosyalar ile yeniden tüm veritabanının inşaası sağlanır. Şimdi bu sınıfın kullanımı ile ilgili örneklere geçelim.
# Yapılandırma
Mİgrasyon verilerini tutacak tablo adını ayarlamak için aşağıda yolu belirtilen yapılandırma dosyasından migrationTable değerini değiştirebilirsiniz. Varsayılan olarak migrations ayarlıdır.
Migration | ||
string | $table = 'migrations' | Migration işlemleri ile gerçekleştirilen tablo oluşturma ve geri alma işlemlerin hangi tabloya kayıt edileceğini belirtir. |
# Yöntemler
Migration | |
string | create($name, int $ver = 0) |
bool | delete(string $name, int $ver = 0) |
bool | deleteAll(void) |
this | version(int $version = 0) |
bool | upAll(string ...$migrateNames) |
bool | downAll(string ...$migrateNames) |
Migrate | |
bool | up(void) |
bool | down(void) |
# Create
Bu yöntem ile Models/Migrations/ dizini için migrasyon oluşturmak için kullanılır. Yöntemi çalıştırdıktan sonra bu dizini kontrol ettiğinizde dosyanın oluşturulğunu görebilirsiniz. Dosya önceden tanımlı bir kaç komutla birlikte oluşturulur. Siz sadece up() ve down() fonksiyonlarının içerisini dolduruyorsunuz.
string | $name | Oluşturulacak migrasyonun adı. |
int | $version = 0 | Versiyon numarası. Hiç bir değer belirtilmez ise versiyon 000 olarak kabul edilir. |
return | bool |
Migration::create('Blog');
Şimdi versiyonunu oluşturalım.
Migration::create('Blog', 1);
Migration::create('Blog', 2);
php zerocore run-class migration:create Blog 3
php zerocore create-migration Blog
# Up / Down (ZN >= 3.0.0)
Oluşturulan migration dosyalarını kullanmak için dosyanızın başına Migrate ön eki getirmeniz gerekiyor. Örneğin Models/Migrations/Blog.php dosyamızın olduğunu kabul edersek bu sınıfı kullanmak için MigrateBlog::up / Migrate::down() şeklinde kullanmalısınız. Böylece Blog adında bir tablo oluşturmak için MigrateBlog::up() yapmanız yeterlidir. Ancak burada up fonksiyonun içerisini sizin doldurmanız gerekmektedir. Ön tanımlı olarak up() fonksiyonu için dropTable() yöntemi tanımlıdır. Siz isterseniz bu komutu değiştirebilirsiniz. Aşağıdaki örnekte migrasyon dosyasının nasıl kullanılacağı ve içeriği hakkında bilgi verilmiştir.
void | ||
return | mixed |
class InternalMigrateBlogs extends ZNDatabaseInternalMigration
{
#---------------------------------------------------------------------------
# Class/Table Name
#---------------------------------------------------------------------------
const table = __CLASS__;
#---------------------------------------------------------------------------
# Up
#---------------------------------------------------------------------------
public function up()
{
# Queries
}
#---------------------------------------------------------------------------
# Down
#---------------------------------------------------------------------------
public function down()
{
$this->dropTable();
}
}
Yukarıdaki içerikte up ve down fonksiyonlarının içeriği sizin yapmayı planladığınız Database işlemlerine göre şekillenecektir. Up() fonksiyonu içerisinde ne gibi işlemler yapabileceğiniz aşağıdaki tabloda verilmiştir.
Up | |
createTable() | DBForge::createTable() kullanımı gibidir. |
addColumn() | DBForge::addColumn() kullanımı gibidir. |
modifyColumn() | DBForge::modifyColumn() kullanımı gibidir. |
Down | |
dropTable() | DBForge::dropTable() kullanımı gibidir. |
dropColumn() | DBForge::dropColumn() kullanımı gibidir. |
truncate() | DBForge::truncate() kullanımı gibidir. |
public function up()
{
$this->createTable
([
'id' => [DB::int(11), DB::autoIncrement(), DB::primaryKey()]
]);
}
public function down()
{
$this->dropTable();
}
Yukarıda belirtilen dosyayı kaydedildikten sonra herhangi bir kontrolcü içerisinde kullanılabilir. Yada konsol komutu ile çalıştırılabilir.
MigrateBlog::up() # Create Table
MigrateBlog::down() # Drop Table
php zerocore run-class migrateblog:up
php zerocore run-class migrateblog:down
php zerocore up-migration Blog
php zerocore down-migration Blog
# UpAll / DownAll
Aynı anda birden fazla migration dosyasını çalıştırmak için kullanılır.
string | ...$migrateNames | Migrate edilecek dosyaların adı. |
return | bool |
Migration::upAll('Blogs', 'Users', 'Profiles');
Migration::downAll('Blogs', 'Users', 'Profiles');
php zerocore multiup-migration Blogs Users Profiles
php zerocore multidown-migration Blogs Users Profiles
# Version
Göçlerin versiyonunu ya da oluşturulan göç dosyalarından hangi versiyonun kullanılacağını belirtmek için kullanılır.
int | $version | Versiyon numarası. |
return | this |
MigrateBlog001:up(); # Create Table Version 1
MigrateBlog001:down(); # Drop Table Version 1
MigrateBlog::version(1)->up(); # Create Table Version 1
MigrateBlog::version(1)->down(); # Drop Table Version 1
# Delete / DeleteAll
Oluşturulan göçleri silmek için kullanılır.
string | $name | Silinecek migrasyonun adı. |
int | $version = 0 | Silinecek migrasyonun versiyonu. |
return | bool |
Migration::delete('Blog'); // Deleted Blog File
Migration::delete('Blog', 1); // Deleted Blog 001 File
Migration::delete('Blog', 2); // Deleted Blog 002 File
Migration::deleteAll(); // Deleted All File
php zerocore run-class migration:delete blog 1
php zerocore run-class migration:deleteall
php zerocore delete-migration Blog
php zerocore delete-migration-all