menu

Phalcon - Migration and seed


Pada tutorial kemarin kita sudah berkenalan dengan syntax-syntax phalcon,

Tutorial kali ini kita akan membuat migration dan seeder database, dikarenakan sampai saat tutorial ini dibuat phalcon belum menyediakan function untuk migration dan seed database maka kita akan membuatnya dengan cara manual.

Oke langsung saja kita mulai tutorialnya pertama, buat file mirgate.php pada path app/migrations/ dan isikan code berikut,
<?php

defined('BASE_PATH') || define('BASE_PATH', getenv('BASE_PATH') ?: realpath(dirname(__FILE__) . '/../..'));
defined('APP_PATH') || define('APP_PATH', BASE_PATH . '/app');

if (!function_exists('env')) {
    // Use composer autoloader to load vendor classes
 require_once BASE_PATH . '/vendor/autoload.php';

 /**
  * Environment variables
  */
 $dotenv = new Dotenv\Dotenv(BASE_PATH . '/');
 $dotenv->load();
}

$host = getenv('DB_HOST');
$user = getenv('DB_USER');
$pass = getenv('DB_PASS');
$dbname = getenv('DB_NAME');

try {
    $db = new PDO("mysql:host=$host;CHARSET=utf8;COLLATE=utf8_unicode_ci", $user, $pass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->exec("CREATE DATABASE IF NOT EXISTS `$dbname`; CREATE USER '$user'@'localhost' IDENTIFIED BY '$pass'; GRANT ALL ON `$dbname`.* TO '$user'@'localhost'; FLUSH PRIVILEGES; DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci") 
    or die(print_r($db->errorInfo(), true));
} catch(PDOException $e) {
    die("DB ERROR: ". $e->getMessage());
}

//migrate
include_once "users.php";

//seed
include_once "user_seed.php";

echo "\n Success All!!! \n";

Selanjutnya, pada path yang sama buat file users.php dan isikan code berikut,
<?php

$tablename = "users";

try {
    $db = new PDO("mysql:dbname=$dbname;host=$host;CHARSET=utf8;COLLATE=utf8_unicode_ci", $user, $pass);
    $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $db->exec("CREATE TABLE IF NOT EXISTS $tablename(
      id bigint( 20 ) AUTO_INCREMENT PRIMARY KEY,
      name varchar( 50 ) COLLATE utf8_unicode_ci NOT NULL,
      email varchar( 150 ) COLLATE utf8_unicode_ci NOT NULL, 
      address text( 150 ) COLLATE utf8_unicode_ci,
      created_at timestamp DEFAULT CURRENT_TIMESTAMP,
      updated_at timestamp DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci");
    print("Created $tablename Table success.\n");
} catch(PDOException $e) {
    echo $e->getMessage();
}

Terakhir, pada path yang sama juga buat file user_seed.php dan isikan code berikut,
<?php

$tablename = "users";

try {
    $db = new PDO("mysql:dbname=$dbname;host=$host;CHARSET=utf8;COLLATE=utf8_unicode_ci", $user, $pass);
    $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $db->exec("TRUNCATE TABLE $tablename;");
    $db->exec("INSERT INTO $tablename (name, email, address) VALUES ('Dracule', 'dracule@mail.com', 'Jalan ganteng kali no. 1')");
    $db->exec("INSERT INTO $tablename (name, email, address) VALUES ('Mihawk', 'mihawk@mail.com', 'Jalan ganteng kali no. 2')");
    print("Seed $tablename Table success.\n");
} catch(PDOException $e) {
    echo $e->getMessage();
}

Sehingga tampilan struktur file nya akan tampak seperti ini,


Untuk mengetestnya, buka terminal dan arahkan pada path project anda, kemudian masukan syntax berikut pada terminal,
php app/mirgations/mirgate.php

Sehingga tampilanya akan tampak seperti ini,


Dan hasilnya akan tampak seperti ini,


===DONE!===