Migration Yapısı

Migration yapısı sayesinde veritabanını kolaylıkla oluşturabilir ve yönetebilirsiniz. Veritabanı özelinde bir komuta ihtiyaç duymadan işlem yapabilmenize olanak sağlar.

Bu yapı sayesinde veritabanı üzerinde yaptığınız tüm işlemleri, değişiklikleri versiyonlama sitemi gibi takip edebilirsiniz. “Aktar ve Kur” yaklaşımı ile bir kaç komut üzerinden işlem yapabilirsiniz.

Migration sınıfları laravel içersinde /database/migrations dizini içerisinde bulunurlar.

Migration Komutları

Aşağıdaki komut ile DosyaAdi isimli tabloyu yaratmak için bir migration dosyası oluşturabilirsiniz. Bu dosya sadece UP ve DOWN fonsiyonlarından meydana gelir. Bu fonksiyonların içi de boştur.

php artisan make:migration DosyaAdi

Create parametresi ile create şeması ekleyebilirsiniz. Şemayı eklerken yaratılacak tablonun adı tabloAdi yerinde yazacaktır.

php artisan make:migration DosyaAdi --create=tabloAdi

Migration dosyasını düzenledikten sonra aşağıdaki komut ila dosyayı çalıştırıp belirttiğiniz DB şemasını oluşturabilirsiniz.

php artisan migrate

Yapılan tüm migration işlemlerini sıfırlamakta mümkündür. Yalnız burada dikkat edilmesi gereken husus tablolardaki verilerde silinir.

php artisan migrate:reset

adimSayisi kadar migration işlemini tekrarlamak için aşağıdaki komut kullanılabilir.

php artisan migrate:rollback –-step=adimSayisi

Aşğaıdaki komut ile veritabanını baştan oluşturmak için kullanılabilir.

php artisan migrate:refresh

Migrate ettiğiniz tablolara test verileri ekleyebilirsiniz.

php artisan migrate:fresh

Migration tamamlandıktan sonra aşağıdaki komut ile hem Controller hem ona ait bir model meydana getirilebilir.

php artisan make:controller controllerAdi --resource --model=modelAdi

Schema Sınıfı ve Kullanımı

  • Schema sınıfı Migration içerisinde tablo oluşturmayı kolaylaştırır. Create methodu ile kolaylıkla tablo oluşturulabilir.
  • $table->incerements(‘id’) “ tanımlaması ile tablo için  artan düzende “primary key” tanımlanmış olur.
  • Bir diğer varsayılan tanımlama ise “ $table->timestampt()” ‘dir. Klasik tablo yapısında yer alan “created_at” ve “updated_at” column’ları tablomuza dahil olur.Ön tanımlı diğer column’lar ise;
    • $table->primary(“id”)
    • $table->string(“name”)
    • $table->integer(“year”)
    • $table->boolean(“status”)
    • $table->decimal(“money”)
    • $table->datetime(“birthday”)
  • Schema class’ında kullanılan diğer column alanları ise;
    • Varchar tipi için “string()”
    • Text tipi için “text()”
    • Int tipi için “ integer()”
    • Float tipi için “float()”
    • Double tipi için “double()”
    • Decimal tipi için “decimal()”
    • Datetime için “datetime()”
    • Char için “char()”
    • Büyük yazı alanları için “longText()”
    • Büyük sayılar için “bigInteger()”
    • Json veriler için “json()”
    • Boolean değerler için “boolean()”
  • Schema class’ı içerisinde sınırlandırma yapmakta mümkündür. Sınırlandırmalar genellikle tip tanımlamaları ile birlikte yapılır.
    • Varchar tipi sınırlandırma için “string(‘name’,100)”
    • Otomatik artırılabilir alanlar için “integer(‘count’)->autoIncrement()”
    • Boş geçilebilir alanlar için “string(‘desc’)->nullable()”
    • Varsayılan değerler için “string(‘img’)->default(‘defaultimg.png’)”
    • Benzersiz değerler için “string(‘email’)->unique()”
    • Özel charset tanımlamak için “string(‘desc’)->charset(‘utf-8’)”
    • Özel collation tanımlamak için “string(‘desc’)->collation(‘utf8_turkish_ci’)”
  • Tablonun genel özellikleri değiştirmek mümkündür.
    • Charset tanımlamak için “$table->charset(‘utf8’)”
    • Collaction tanımlamak için “$table->collaction(‘utf8_turkish_ci’)”
    • Mysql tipi değiştirmek için “$table->engine(‘InnoDB’)”

İPUCU

Laravel’in varsayılan şema boyutları yetersiz kalabilir. Bu durumun çözümü için “AppServiceProvider.php” dosyasını bulun. Dosyanın içerisinde yer alan “boot()” methodu içerisine “Schema::defaultStringLength(191);” tanımlamasını yapınız.

LÜTFEN DİKKAT

Migration işlemlerine başlamadan önce .env dosyasındaki veritabanı erişim tanımlarını kontrol edip doğru olduğuna emin olun.