![](https://ioox.studio/wp-content/uploads/2022/08/main.png)
“Migration” ili migracija je naziv za proces u kojem preko CLI naredbe učitavamo datoteku migracije i po učitanim postavkama, stvaramo tablice/stupce u bazi podataka. Radi se o tome da kada prebacimo projekt na drugo računalo, možemo stvoriti cijeli kostur baze podataka sa CLI naredbom.
Pripremimo projekt
Da sad tu ne pišem iznova o tome kako pripremiti projekt, sve imate ovdje.
Da bi napravili datoteku migracije:
php spark make:migration main
S ovime dobivamo datoteku:
./app/Database/Migrations/2022-08-07-084359_Main.php
Sa sadržajem:
<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; class Main extends Migration { public function up() { // } public function down() { // } }
S “up” metodom unosimo podatke u bazu a s “down” brišemo uneseno. “up” metoda sa unesenim podacima izgleda ovako:
public function up() { $this->forge->addField([ 'id' => [ 'type' => 'INT', 'constraint' => 5, 'unsigned' => true, 'auto_increment' => true, ], 'name' => [ 'type' => 'VARCHAR', 'constraint' => '256', 'null' => false ], 'updated_at' => [ 'type' => 'datetime', 'null' => true, ], 'created_at datetime default current_timestamp', ]); $this->forge->addPrimaryKey('id'); $this->forge->createTable('products'); }
Nakon što smo unijeli podatke u “up” metodu u terminalu pokrećemo:
php spark migrate
…i sada vidimo da su tablica i stupci u bazi podataka:
![](https://ioox.studio/wp-content/uploads/2022/08/ci_migration-1024x270.png)
Rollback
Ova naredba izvodi ono što se nalazi u “down” metodi datoteke migracije. Ovdje određujemo da ćemo obrisati “products” tablicu:
public function down() { $this->forge->dropTable('products'); }
CLI naredba izgleda ovako:
php spark migrate:rollback
Više tablica u jednoj migraciji
Ako želimo imati više tablica u jednoj datoteci migracije, jednostavno ih dodamo jednu ispod druge u “up” odnosno “down” metodama.
public function up() { $this->forge->addField([ ... $this->forge->createTable('products'); $this->forge->addField([ ... $this->forge->createTable('users'); } public function down() { $this->forge->dropTable('products'); $this->forge->dropTable('users'); }
Strani ključevi
Naprimjer, želimo da nam “userId” stupac bude povezan sa “id” stupcem u “users” tablici.
$this->forge->addField([ ... 'userId' => [ 'type' => 'INT', 'unsigned' => true, 'null' => false, ], ... ]); ... $this->forge->addForeignKey('userId', 'users', 'id', 'CASCADE', 'CASCADE');
Eto, kratko i nadam se, jasno.