№20 Dars — Yiida migratsiya bilan ishlash.
Migratsiya web dasturlash jarayonida ma`lumotlar omboridagi o`zgarishlarni amalga oshirishni yengillatuvchi va tezlashtiruvchi tehnologiya. Misol uchun, ish jarayonida yangi jadval qo`shilishi mumkin, yoki qaysidir jadvalga ustun qo`shish kabi ishlar.
Bu ma`lumotlar omboridagi o`zgarishlar eng muhim va asosiy ish hisoblandi va u migratsiya orqali amalga oshiriladi.
Agar kodingiz va ma`lumotlar omboringiz boshqalarniki bilan muvofiq bo`lmasa dasturingiz ishlamaydi. Bunday holatni oldini olish maqsadida Yii o`zining migratsiya deb ataluvchi tehnologiyasini ishlab chiqqan. Bu bizga ma`lumotlar omboridagi o`zgarishlarni nazorat qilish imkonini beradi.
Quyida web ilovani ishlab chiqishda migratsiyadan foydalanish jarayonini qadamma qadam ko`rib chiqamiz:
1. Ivan yangi migratsiya hosil qildi (misol uchun, yangi jadval hosil qilish).
2. Ivan sistemani o`zgarishlari bilan to`ldiradi (SVN , GIT yoki boshqalar orqali)
3. Andrey sistemadan o`ziga update qiladi va yangi migratsiya oladi.
4. Andrey o`zining lokalniy ma`lumotlar omborida migratsiyani qo`llidi.
Yii da yiic migrate cmd orqali migratsiya ishlatiladi. Yangi migratsiya yaratishni, bekor qilishni yoki qayta qo`llashni ishlatish mumkin.
Izoh: Migrate komandasi bilan ishlash jarayonida yiic ilovasi bor joyda yaratishni tavsiya qilamiz.Ya`ni cd path/to/protected dan keyin amalga oshirish kerak. Migratsiya fayli hosil bo`lishi uchun mumkin va muvofiq bo`lgan joy bu » protectedmigrations » yo`lidir. Shuningdek «protected/config/console.php» da ma`lumotlar ombori bilan bog`lanish sozligini tekshirib qo`yishimiz kerak.
Migratsiya hosil qilish.
Biz yangi migratsiya hosil qilishimiz uchun konsol oynasiga quyidagicha kod kiritishimiz kerak:
yiic migrate create
«name» yozilishi kerak bo`lgan parametr. Bu namega qisqa tarzda tarifi bilan yozilishi maqsadga muvofiq.(Misol uchun, create_news_table). Keyinchalik bu migratsiya classining nomi aslida bir qismi bo`lib qolishini ko`rasizlar. Keyinchalik bunday nom yaratilsaham asl nomi ustma ust tushib qolmaydi.
yiic migrate create create_news_table
m101129_185401_create_news_table.php fayl «protected/migrations» direktoriyasida hosil qilindi va quyidagicha kod avtomat ravishda yoziladi.
class m101129_185401_create_news_table extends CDbMigration { public function up() { } public function down() { echo "m101129_185401_create_news_table does not support migration down.n"; return false; } /* public function safeUp() { } public function safeDown() { } */ }
Aytib o`tish joiz migratsiya fayli yaratilayotganda uning nomi quyidagicha strukturaga ega bo`ladi.
m
up() metodi migratsiyada amalga oshiriladigan asosiy kodni saqlidi va down() metodi esa up() da amalga oshirilishi kerak bo`lgan kodni bekor qilish kodini saqlidi.
Bazan down() ni amalga oshirishga xojat qolmaydi. Misol uchun up() metodida biz jadvalni o`chirib yuborish kodini yozgan bo`lsak. Unda down() metodida xech qanday kod yozish shart bo`lmay qoladi. Bu holatdagi migratsiyalarda malumotlar omboridagi holatdan joriy holatga qaytarib bo`lmasligini bildiradi. Bu keltirilgan down() metodi kodidan false qiymat qaytadi. Bu migartsiyani down() metodi uchun ishga tushirib bo`lmasligini anglatadi.
Axborot: up() yoki down() metodi 1.1.7 versiyasidan boshlab false qaytaradi. Bundan oldingi versiyalar uchun bu holat amalga oshmaydi. 1.1.6 versiyasi bundan istisno.
Migratsiya misolida news jadvalini yaratishni ko`ramiz.
class m101129_185401_create_news_table extends CDbMigration { public function up() { $this->createTable('tbl_news', array( 'id' => 'pk', 'title' => 'string NOT NULL', 'content' => 'text', )); } public function down() { $this->dropTable('tbl_news'); } }
CDbMigration classi bu malumotlar ombori strukturasini va mal`umotlar bilan ishlash uchun metodlar to`plamini taqdim etadi. Misol uchun CDbMigration::createTable metodida yangi jadval hosil qilish mumkin, CDbMigration::insert metodida yangi satr qo`shishimiz mumkin. Xamma metodlar ma`lumotlar ombori bilan bog`langanda bajariladigan metodlardir.
Tranzaksiyali migratsiya
Axborot: Bunday imkoniyat 1.1.7 versiyasidan boshlanadi.
Biz murakkab migratisyalarni amalga oshirayotganimizda, ya`ni hamma berilgan zaproslarni to`liq bajarilishi talab qilinsa va qaysi biridur bajarilmasa qolgan barcha amalga oshgan zaproslarimiz orqaga qaytishini xoxlasak unda tranzaksiyadan foydalanish bizga bu borada ancha imkoniyat beradi.
class m101129_185401_create_news_table extends CDbMigration { public function up() { $transaction=$this->getDbConnection()->beginTransaction(); try { $this->createTable('tbl_news', array( 'id' => 'pk', 'title' => 'string NOT NULL', 'content' => 'text', )); $transaction->commit(); } catch(Exception $e) { echo "Exception: ".$e->getMessage()."n"; $transaction->rollback(); return false; } } // …down() uchun o`xshash kod }
Yana up() o`rniga safeUp() metodini, down() o`rniga safeDown() metodini qo`llashimiz mumkin.
class m101129_185401_create_news_table extends CDbMigration { public function safeUp() { $this->createTable('tbl_news', array( 'id' => 'pk', 'title' => 'string NOT NULL', 'content' => 'text', )); } public function safeDown() { $this->dropTable('tbl_news'); } }
Yii ning migratsiyasini amalga oshirilayotganda tranzaksiya bilan boshlanishi kerak, keyin safeUp() va safeDown() kodlari bajariladi. Agarda qandaydir xatolik bo`lsa tranzaksiya barcha qilingan ishlarni oldingi holatga qaytarib qo`yadi. Ya`ni ma`lumotlar ombori migratsiya qilinishidan oldingi holatiga qaytib qoladi.
Izoh: Xamma Malumotlar omborini boshqarish tizimlari ham xamma holatlari uchun ham bajarilmaydi. Bu holatda tranzaksiyani bajarish bo`lmasa, unda up() va down() lardan foydalanish kerak bo`ladi. Bu holatda MySQL yoki MariaDB
MySQL yoki MariaDB bir qancha SQL zaproslarni bajarishda oshkormas tranzaksiyani chaqirib foydalanishimiz mumkin. MySQL va MariaDB dokumentlarini ko`ring.
Migratsiyadan foydalanish.
Barcha migratsiyalarni qo`llash uchun ( sizning lokalniy kompyuteringizda Malumotlar ombori tayyor holatda bo`lishi kerak, ya`ni to`liq o`rnatilgan va hozirda ishlayotgan holatda), quyidagi komandani yozishingiz kerak bo`ladi.
yiic migrate
Bu komanda sizga barcha yangi migratsiyalar ro`yhatini up() metodini ishga tushirish navbati bo`yicha va xar bir migratsiya classlarini hosil qilingan navbati bo`yicha tartibda ko`rsatadi.
Bu ro`yhat bizaga qaysi migratsiyalar bajarilgan va qaysilari yangiligini ko`rsatadi.
Agar tbl_migration jadvali mavjud bo`lmasa, uni ko`rsatilgan db dasturi komponentasi ma`lumotlar omborida avtomat hosil qiladi.
Ba`zan faqat bitta yoki bir qancha yangi migratsiyalarni qabul qilish talab qilinadi. Bu ish uchun quyidagi komandadan foydalaniladi:
yiic migrate up 3
Ro`yhatda boshidagi uchta migratsiyalarni qo`llash. Bunda faqatgina boshidagi uchta yangi migratsiya amalga oshadi. Uchtani o`rniga xoxlagan sonimizni ko`rsatish mumkin.
Migratsiyani bekor qilish.
Bir yoki bir nechta oxirgi qo`llanilgan migratsiayalarni bekor qilish uchun quyidagi komandadan foydalanish mumkin:
yiic migrate down [step]
agar step parametrini bermasangiz oxirgi migratsiyani bekor qiladi.
Avval ham aytganimizdek hamma migratsiyalarni ham bekor qilib bo`lmaydi. Migratsiyani rad qilishimizda bunday migratsiyalar uchun rad qilish jarayoni to`xtatiladi.
Manba:
Web Dasturlash
№20 Dars — Yiida migratsiya bilan ishlash.