akrabat/akrabat_db_schema_manager

Akrabat为Zend Framework 1数据库迁移提供的Zend Tool Provider

1.0.0 2013-02-26 19:42 UTC

This package is auto-updated.

Last update: 2024-09-06 15:51:08 UTC


README

有关完整详细信息,请参阅Akrabat_Db_Schema_Manager: Zend Framework数据库迁移。此代码采用New-BSD许可

Akrabat_Db_Schema_Manager是用于ZF1的工具。如果您需要一个独立工具,那么请查看South for the Winter

ZF1

要使Zend_Tool提供者工作

  1. 将ZF1的副本放置在/usr/local/include/zf1/中,以确保Zend文件夹位于zf1/library/Zend

  2. 更新您的~/.bash_profile以设置对zf.sh脚本的别名

     alias zf='export ZF_CONFIG_FILE=~/.zf.ini; /usr/local/include/zf1/bin/zf.sh'
    

    重新启动您的终端或source ~/.bash_profile

  3. 如果您尚未这样做,请设置存储目录和配置文件

     zf --setup storage-directory
     zf --setup config-file
    
  4. 将Akrabat Tools的副本放置在/usr/local/include/Akrabat

     cd /usr/local/include
     git clone http://github.com/akrabat/Akrabat.git
    
  5. 编辑创建的~/.zf.ini。更改路径,使其包含ZF1和Akrabat/library,允许自动加载Akrabat并设置提供者

     php.include_path = "/usr/local/include/zf1/library:/usr/local/include/Akrabat/library/"
     autoloadernamespaces.0 = "Akrabat_"
     basicloader.classes.0 = "Akrabat_Tool_DatabaseSchemaProvider"
    
  6. zf应提供一个帮助屏幕,其中包含底部的DatabaseSchema提供者。

Akrabat_Db_Schema_Manager

  1. 在您的ZF应用程序中创建scripts/migrations文件夹

  2. 在migrations中创建具有nnn-Xxxx.php格式的迁移文件。例如001-Users.php,其中
    nnn => 任何数字。数字越小的文件先执行
    Xxx => 任何名称。这是文件内的类名称。

    在up()中应用数据库更改,在down()中撤销更改。如果更改无法撤销,则down()应抛出Akrabat_Db_Schema_Exception。

  3. 在您的迁移文件中创建一个类。例如001-Users.php

     class Users extends Akrabat_Db_Schema_AbstractChange 
     {
         function up()
         {
             $tableName = $this->_tablePrefix . 'users';
             $sql = "
                 CREATE TABLE IF NOT EXISTS $tableName (
                   id int(11) NOT NULL AUTO_INCREMENT,
                   username varchar(50) NOT NULL,
                   password varchar(75) NOT NULL,
                   roles varchar(200) NOT NULL DEFAULT 'user',
                   PRIMARY KEY (id)
                 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
             $this->_db->query($sql);
     
             $data = array();
             $data['username'] = 'admin';
             $data['password'] = sha1('password');
             $data['roles'] = 'user,admin';
             $this->_db->insert($tableName, $data);
         }
         
         function down()
         {
             $tableName = $this->_tablePrefix . 'users';
             $sql= "DROP TABLE IF EXISTS $tableName";
             $this->_db->query($sql);
         }
     
     }
    
  4. 如果您想添加表前缀,请将其添加到您的application.ini

     resources.db.table_prefix = "prefix"
    

Phing任务

  1. build.xml中定义phing任务

     <taskdef name="dbmigration" classname="phing.tasks.PhingAkrabatDbSchemaManager" />
    
  2. build.xml中设置具有数据库选项的phing目标

     <target name="database-migration">
     	<dbmigration adapter="mysqli" host="${db.host}" dbname="${db.name}" username="${db.user}" password="${db.pass}" />
     </target>
    
  3. 通过命令行运行phing,使用phing database-migration