Migrations / Göçler


    × Bunları biliyor muydunuz?
"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.

File: Config/Database.php
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.

Parametreler
string $name Oluşturulacak migrasyonun adı.
int $version = 0 Versiyon numarası. Hiç bir değer belirtilmez ise versiyon 000 olarak kabul edilir.
return bool
Kullanımı
File: Controllers/MigrationExample.php
Migration::create('Blog');

Şimdi versiyonunu oluşturalım.

File: Controllers/MigrationExample.php
Migration::create('Blog', 1); 
Created File: Models/Migrations/BlogVersion/001.php
Migration::create('Blog', 2);
Created File: Models/Migrations/BlogVersion/002.php
Konsol Kullanımı
php zerocore run-class migration:create Blog 3
Created File: Projects/ProjectDirectory/Models/Migrations/BlogVersion/003.php
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.

Parametreler
void
return mixed
Kullanımı
Created File: Models/Migrations/Blog.php
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.

Migrate Up/Down Yöntemleri
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.
Edited File: Models/Migrations/Blog.php
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.

File: Controllers/MigrateExample.php
MigrateBlog::up()   # Create Table
MigrateBlog::down() # Drop Table
Konsol Kullanımı
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.

Parametreler
string ...$migrateNames Migrate edilecek dosyaların adı.
return bool
Kullanımlar
Migration::upAll('Blogs', 'Users', 'Profiles');
Migration::downAll('Blogs', 'Users', 'Profiles');
Konsol Kullanımı
​​​​​​​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.

Parametreler
int $version Versiyon numarası.
return this
Kullanımı
File: Projects/ProjectDirectory/Controller/MigrateExample.php
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.

Parametreler
string $name Silinecek migrasyonun adı.
int $version = 0 Silinecek migrasyonun versiyonu.
return bool
Kullanımı
File: Projects/ProjectDirectory/Controllers/MigrationExample.php
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
Konsol Kullanımı
php zerocore run-class migration:delete blog 1
php zerocore run-class migration:deleteall
​​​​​​​php zerocore delete-migration Blog
php zerocore delete-migration-all