Jarves\Propel\Behavior\WorkspaceBehavior::addVersionTable PHP Method

addVersionTable() public method

Adds version table.
public addVersionTable ( )
    public function addVersionTable()
    {
        $table = $this->getTable();
        $database = $table->getDatabase();
        $this->versionTableName = isset($this->parameters['version_table']) ? $this->parameters['version_table'] : null;
        if (!$this->versionTableName) {
            if ($database->getTablePrefix() && ($start = strlen($database->getTablePrefix()))) {
                $this->versionTableName = substr($table->getName() . '_version', $start);
            } else {
                $this->versionTableName = $table->getName() . '_version';
            }
        }
        $this->versionTablePhpName = $table->getPhpName() . 'Version';
        if (!$database->hasTable($this->versionTableName)) {
            // create the version table
            $versionTable = $database->addTable(array('name' => $this->versionTableName, 'phpName' => $this->versionTablePhpName, 'package' => $table->getPackage(), 'schema' => $table->getSchema(), 'namespace' => $table->getNamespace() ? '\\' . $table->getNamespace() : null));
            $versionTable->isVersionTable = true;
            $versionTable->addColumn(array('name' => $this->prefix . 'rev', 'type' => 'INTEGER', 'primaryKey' => 'true', 'autoIncrement' => 'true'));
            // copy all the columns
            foreach ($table->getColumns() as $column) {
                $columnInVersionTable = clone $column;
                $columnInVersionTable->clearInheritanceList();
                if ($columnInVersionTable->hasReferrers()) {
                    $columnInVersionTable->clearReferrers();
                }
                if ($columnInVersionTable->isAutoincrement()) {
                    $columnInVersionTable->setAutoIncrement(false);
                }
                $versionTable->addColumn($columnInVersionTable);
            }
            /*
            // create the foreign key
            $fk = new ForeignKey();
            $fk->setForeignTableCommonName($table->getCommonName());
            $fk->setForeignSchemaName($table->getSchema());
            $fk->setOnDelete('CASCADE');
            $fk->setOnUpdate(null);
            
            $tablePKs = $table->getPrimaryKey();
            foreach ($versionTable->getPrimaryKey() as $key => $column) {
                $fk->addReference($column, $tablePKs[$key]);
            }
            $versionTable->addForeignKey($fk);
            */
            $this->versionTable = $versionTable;
            // every behavior adding a table should re-execute database behaviors
            // see bug 2188 http://www.propelorm.org/changeset/2188
            foreach ($database->getBehaviors() as $behavior) {
                $behavior->modifyDatabase();
            }
        } else {
            $this->versionTable = $database->getTable($this->versionTableName);
        }
    }