Yii - Veritabanı Geçişi

Veritabanına dayalı bir uygulamanın geliştirilmesi sırasında, veritabanı yapısı kaynak kodla birlikte gelişir. Yii,database migration veritabanı değişikliklerini takip etmenizi sağlayan özellik.

Yii, aşağıdaki geçiş komut satırı araçlarını sağlar -

  • Yeni geçişler oluşturun
  • Taşıma işlemlerini geri alın
  • Taşıma işlemleri uygulayın
  • Taşıma işlemlerini yeniden uygulayın
  • Taşıma durumunu ve geçmişini göster

Bir Göç Oluşturmak

Yeni bir veritabanı geçişi oluşturalım.

Step 1 - Temel uygulama şablonunun proje kök dizininde konsol penceresini açın ve çalıştırın.

./yii migrate/create add_news_table

Yukarıdaki komut, yeni bir geçiş dosyası (bu durumda m160113_102634_add_news_table.php) oluşturacaktır. migrations Klasör.

Dosya şu kodu içerir -

<?php
   use yii\db\Schema;
   use yii\db\Migration;
   class m160113_102634_add_news_table extends Migration {
      public function up() {
   
      }
      public function down() {
         echo "m160113_102634_add_news_table cannot be reverted.\n";
         return false;
      }
      /*
      // Use safeUp/safeDown to run migration code within a transaction
      public function safeUp() {
 
      }
      public function safeDown() {
   
      }
      */
   }
?>

Her DB geçişi, yii\db\Migrationsınıf. Sınıf adı aşağıdaki biçimde oluşturulur -

m<YYMMDD_HHMMSS>_<Name>

nerede <YYMMDD_HMMSS> geçiş komutunun yürütüldüğü UTC tarih saatidir ve konsol komutunda sağladığınız <İsim> bağımsız değişkendir.

Up () yöntemi, veritabanınızı yükselttiğinizde çağrılırken down () yöntemi, düşürdüğünüzde çağrılır.

Step 2 - Veritabanına yeni bir tablo eklemek için geçiş dosyasını bu şekilde değiştirin.

<?php
   use yii\db\Schema;
   use yii\db\Migration;
   class m160113_102634_add_news_table extends Migration {
      public function up() {
         $this->createTable("news", [ "id" => Schema::TYPE_PK, "title" => Schema::TYPE_STRING, "content" => Schema::TYPE_TEXT, ]); } public function down() { $this->dropTable('news');
      }
      /*
      // Use safeUp/safeDown to run migration code within a transaction
      public function safeUp() {
	
      }
      public function safeDown() {

      }
      */
   }
?>

Yukarıdaki kodda haber adında yeni bir tablo oluşturduk. up() yöntem ve bu tabloyu down() yöntem.

newstablo üç alandan oluşur: id, başlık ve içerik. Bir tablo veya sütun oluştururken, geçişlerin bir veritabanı türünden bağımsız olması için soyut türleri kullanmalıyız. Örneğin, MySQL durumunda, TYPE_PK, int (11) NOT NUL AUTO_INCREMETN PRIMARY KEY'e dönüştürülecektir.

Step 3 - Bir veritabanını yükseltmek için bu komutu çalıştırın.

./yii migrate

Yukarıdaki komut, henüz uygulanmamış tüm mevcut geçişleri listeleyecektir. Ardından, geçişleri uygulamayı onaylarsanız, tüm yeni geçiş sınıflarında safeUp () veya up () çalıştırılır.

Step 4 - Yalnızca mevcut üç geçişi uygulamak için koşabilirsiniz.

./yii migrate 3

Step 5 - Veritabanının taşınacağı belirli bir geçişi de tanımlayabilirsiniz.

# geçişi belirtmek için zaman damgası kullanma

yii migrate/to 160202_195501

# strtotime () ile ayrıştırılabilen bir dizge kullanarak

yii migrate/to "2016-01-01 19:55:01"

# tam adı kullanarak

yii migrate/to m160202_195501_create_news_table

# UNIX zaman damgası kullanarak

yii migrate/to 1393964718

Step 6 - Bir geçişi geri döndürmek için (down () veya safeDown () yöntemlerini yürütün), çalıştırın.

./yii migrate/down

Step 7 - En son uygulanan beş taşımayı geri döndürmek için koşabilirsiniz.

./yii migrate/down 5

Step 8 - Taşıma işlemlerini yeniden yapmak (geri döndürmek ve sonra tekrar uygulamak) için çalıştırın.

./yii migrate/redo

Zaten uygulanmış taşıma işlemlerini listelemek için şu komutları kullanın -

  • yii migrate/new # ilk 10 yeni geçişi gösterir

  • yii migrate/new 3 # ilk 3 yeni geçişi gösterir

  • yii migrate/new all # tüm yeni geçişleri gösterir

  • yii migrate/history #, uygulanan son 10 taşımayı gösterir

  • yii migrate/history 20 #, uygulanan son 20 taşımayı gösterir

  • yii migrate/history all #, uygulanan tüm geçişleri gösterir

Bazen belirli bir tablodan bir sütun eklemeniz veya bırakmanız gerekir. KullanabilirsinizaddColumn() ve dropColumn() yöntemler.

Step 1 - Yeni bir geçiş oluşturun.

./yii migrate/create add_category_to_news

Step 2 - Yeni oluşturulan taşıma dosyasını bu şekilde değiştirin.

<?php
   use yii\db\Schema;
   use yii\db\Migration;
   class m160113_110909_add_category_to_news extends Migration {
      public function up() {
         $this->addColumn('news', 'category', $this->integer());
      }
      public function down() {
         $this->dropColumn('news', 'category');
      }
   }
?>

Şimdi, eğer koşarsan ./yii migratekategori sütunu haber tablosuna eklenmelidir. Aksine, koşarsan./yii migrate/down 1kategori sütunu kaldırılmalıdır.

DB geçişleri gerçekleştirirken, her geçişin başarılı veya başarısız olduğundan emin olmak önemlidir. DB işlemlerinin bir işlem içine alınması önerilir. İşlem geçişlerini uygulamak için, yalnızca geçiş kodunusafeUp() ve safeDown()yöntemler. Bu yöntemlerde herhangi bir işlem başarısız olursa, önceki tüm işlemler geri alınacaktır.

"İşlem yoluyla" önceki örnek şöyle olacaktır:

<?php
   use yii\db\Schema;
   use yii\db\Migration;
   class m160113_110909_add_category_to_news extends Migration {
      public function safeUp() {
         $this->addColumn('news', 'category', $this->integer()); } public function safeDown() { $this->dropColumn('news', 'category');
      }
   }
?>

yii\db\Migration sınıfı, veritabanlarını işlemek için aşağıdaki yöntemleri sağlar -

  • execute() - Ham bir SQL ifadesi yürütür

  • createTable() - Bir tablo oluşturur

  • renameTable() - Bir tabloyu yeniden adlandırır

  • insert() - Tek sıra ekler

  • batchInsert() - Birden çok satır ekler

  • update() - Satırları günceller

  • delete() - Satırları siler

  • addColumn() - Bir sütun ekler

  • renameColumn() - Bir sütunu yeniden adlandırır

  • dropColumn() - Bir sütunu kaldırır

  • alterColumn() - Bir sütunu değiştirir

  • dropTable() - Bir masayı kaldırır

  • truncateTable() - Bir tablodaki tüm satırları kaldırır

  • createIndex() - Bir dizin oluşturur

  • dropIndex() - Bir dizini kaldırır

  • addPrimaryKey() - Bir birincil anahtar ekler

  • dropPrimaryKey() - Bir birincil anahtarı kaldırır

  • addForeignKey() - Yabancı anahtar ekler

  • dropForeignKey() - Yabancı anahtarı kaldırır