Phalcon-데이터베이스 마이그레이션

데이터베이스 마이그레이션은 다음과 같은 이유로 중요합니다.

  • 데이터베이스 마이그레이션은 지정된 스토리지 유형간에 데이터를 전송하는 데 도움이됩니다.

  • 데이터베이스 마이그레이션은 한 플랫폼에서 다른 플랫폼으로 마이그레이션하는 웹 기반 애플리케이션의 컨텍스트를 나타냅니다.

  • 이 프로세스는 일반적으로 오래된 데이터를 추적하기 위해 발생합니다.

Phalcon은 다음과 같은 방법으로 데이터베이스 마이그레이션 프로세스를 수행합니다.

Step 1 − 이름이 지정된 프로젝트 생성 “dbProject”xampp/wamp 예배 규칙서.

Step 2 − 적절한 데이터베이스 연결로 프로젝트를 구성하십시오.

<?php 

/*  
   * Modified: preppend directory path of current file, 
      because of this file own different ENV under between Apache and command line.  
   * NOTE: please remove this comment.  
*/

defined('BASE_PATH') || define('BASE_PATH', getenv('BASE_PATH') ?: realpath(dirname(__FILE__) . '/../..')); 
defined('APP_PATH') || define('APP_PATH', BASE_PATH . '/app');  
return new \Phalcon\Config(['database' => [
   'adapter' => 'Mysql', 
   'host' => 'localhost', 
   'username' => 'root', 
   'password' => '', 
   'dbname' => 'demodb', 
   'charset' => 'utf8', ],

'application' => [ 'appDir' => APP_PATH . '/', 
   'controllersDir' => APP_PATH . 
   '/controllers/', 'modelsDir' => APP_PATH . 
   '/models/', 'migrationsDir' => APP_PATH . 
   '/migrations/', 'viewsDir' => APP_PATH . 
   '/views/','pluginsDir' => APP_PATH . 
   '/plugins/', 'libraryDir' => APP_PATH . 
   '/library/', 'cacheDir' => BASE_PATH . 
   '/cache/', 'baseUri' => '/dbProject/', 
] ]);

Step 3− "demodb"데이터베이스에 포함 된 테이블 마이그레이션 명령을 실행합니다. 지금은 하나의 "users"테이블이 포함됩니다.

Step 4 − 마이그레이션 된 데이터베이스 파일은“app”폴더 내의 마이그레이션 디렉터리에 저장됩니다.

따라서 테이블이 성공적으로 마이그레이션됩니다.

마이그레이션 된 파일의 구조 이해

마이그레이션 된 파일에는 확장되는 고유 클래스가 있습니다. Phalcon\Mvc\Model\Migration수업. Phalcon의 Migration 클래스에는up()down(). 그만큼up() 방법은 마이그레이션을 수행하는 데 사용되며 down 방법은 작업을 롤백합니다.

Users.php

<?php  

use Phalcon\Db\Column; 
use Phalcon\Db\Index; 
use Phalcon\Db\Reference; 
use Phalcon\Mvc\Model\Migration;  

/**  
   * Class UserMigration_100  
*/ 

class UserMigration_100 extends Migration {     
   /**      
      * Define the table structure      
      *      
      * @return void 
   */      
   public function morph() { 
      $this->morphTable('user', [ 
         'columns' => [ 
            new Column( 'Id', [ 
               'type' => Column::TYPE_INTEGER, 
               'notNull' => true, 
               'autoIncrement' => true, 
               'size' => 11, 'first' => true ] ), 
            new Column( 'username', [ 
               'type' => Column::TYPE_VARCHAR, 
               'notNull' => true, 
               'size' => 40, 
               'after' => 'Id' ] ), 
            new Column( 'email', [ 
               'type' => Column::TYPE_VARCHAR, 
               'notNull' => true, 
               'size' => 40, 
               'after' => 'username' ] ), 
            new Column( 'password', [ 
               'type' => Column::TYPE_VARCHAR, 
               'notNull' => true, 
               'size' => 10, 
               'after' => 'email' ] ) 
         ],  
         'indexes' => [new Index('PRIMARY', ['Id'], 'PRIMARY') ], 
            'options' => [ 'TABLE_TYPE' => 'BASE TABLE', 
               'AUTO_INCREMENT' => '3', 'ENGINE' => 'InnoDB', 
               'TABLE_COLLATION' => 'latin1_swedish_ci' ], 
      ] ); 
   }  
   
   /**      
      * Run the migrations      
      *      * @return void      
   */     

   public function up() {  
   }  

   /**      
      * Reverse the migrations      
      *
      * @return void      
   */
   public function down() {  
   } 
}

클래스 UserMigration_100 위의 예에서 볼 수 있듯이 다음과 같은 4 개의 섹션이있는 연관 배열이 포함됩니다.

  • Columns − 테이블 열 세트를 포함합니다.

  • Indexes − 테이블 인덱스 세트를 포함합니다.

  • References − 모든 참조 무결성 제약 (외래 키)을 포함합니다.

  • Options − 테이블 생성 옵션 세트가있는 배열.

위의 예에서 볼 수 있듯이 데이터베이스 버전 1.0.0이 성공적으로 마이그레이션되었습니다. Phalcon은 데이터베이스 콘텐츠가 보관되는 방식에 따라 여러 마이그레이션 프로세스를 포함하고 실행할 수 있습니다.