Skip to content
Akrabat_Db_Schema_Manager and a DatabaseSchemaProvider for Zend_Tool
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Akrabat ZF library

See Akrabat_Db_Schema_Manager: Zend Framework database migrations for full details. This code is licensed under the New-BSD license.

Akrabat_Db_Schema_Manager is a tool for use with ZF1. If you need a standalone tool, then have a look at South for the Winter.


To get the Zend_Tool provider working:

  1. Place a copy of ZF1 in /usr/local/include/zf1/, so that the Zend folder is in zf1/library/Zend

  2. Update your ~/.bash_profile to set up an alias to the script

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

    Restart your terminal or source ~/.bash_profile

  3. If you haven't already done so, setup the storage directory and config file:

     zf --setup storage-directory
     zf --setup config-file
  4. Place a copy of the Akrabat Tools in /usr/local/include/Akrabat:

     cd /usr/local/include
     git clone
  5. Edit the created ~/.zf.ini. Change path so that it includes ZF1 and Akrabat/library, allow for auotoloading Akrabat and set up the provider:

     php.include_path = "/usr/local/include/zf1/library:/usr/local/include/Akrabat/library/"
     autoloadernamespaces.0 = "Akrabat_"
     basicloader.classes.0 = "Akrabat_Tool_DatabaseSchemaProvider"
  6. zf should provide a help screen with the DatabaseSchema provider at the bottom.


  1. Create scripts/migrations folder in your ZF application

  2. Create migration files within migrations with the file name format of nnn-Xxxx.php. e.g. 001-Users.php where:
    nnn => any number. The lower numbered files are executed first
    Xxx => any name. This is the class name within the file.

    In up(), database changes are applied, in down(), changes are reverted. If changes cannot be reverted, then down() should throw a Akrabat_Db_Schema_Exception.

  3. Create a class in your migrations file. Example for 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;";
             $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";
  4. If you want a table prefix, add this to your application.ini:

     resources.db.table_prefix = "prefix"

Phing Task

  1. Define the phing task in the build.xml

     <taskdef name="dbmigration" classname="phing.tasks.PhingAkrabatDbSchemaManager" />
  2. Setup a phing target with the database options in the build.xml

     <target name="database-migration">
     	<dbmigration adapter="mysqli" host="${}" dbname="${}" username="${db.user}" password="${db.pass}" />
  3. Run phing using the command line, by phing database-migration

You can’t perform that action at this time.