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