MetaModels\Helper\TableManipulation::setVariantSupport PHP Метод

setVariantSupport() публичный статический Метод

Enables or disables Variant support on a certain MetaModel table.
public static setVariantSupport ( string $strTableName, boolean $blnVariantSupport ) : void
$strTableName string The table name of the MetaModel.
$blnVariantSupport boolean Flag if the support shall be turned on or off.
Результат void
    public static function setVariantSupport($strTableName, $blnVariantSupport)
    {
        if ($blnVariantSupport) {
            if (self::getDB()->tableExists($strTableName, null, true) && !self::getDB()->fieldExists('varbase', $strTableName, true)) {
                self::createColumn($strTableName, 'varbase', 'char(1) NOT NULL default \'\'', true);
                self::createColumn($strTableName, 'vargroup', 'int(11) NOT NULL default 0', true);
                // If there is pre-existing data in the table, we need to provide a separate 'vargroup' value to all of
                // them, we can do this safely by setting all vargroups to the id of the base item.
                self::getDB()->execute(sprintf('UPDATE %s SET vargroup=id, varbase=1', $strTableName));
            }
        } else {
            if (self::getDB()->tableExists($strTableName, null, true) && self::getDB()->fieldExists('varbase', $strTableName, true)) {
                self::dropColumn($strTableName, 'varbase', true);
                self::dropColumn($strTableName, 'vargroup', true);
            }
        }
    }

Usage Example

Пример #1
0
 /**
  * Handle the update of a MetaModel and all attached data.
  *
  * @param PostPersistModelEvent $event The event.
  *
  * @return void
  */
 public function handleUpdate(PostPersistModelEvent $event)
 {
     if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel') {
         return;
     }
     $old = $event->getOriginalModel();
     $new = $event->getModel();
     $oldTable = $old ? $old->getProperty('tableName') : null;
     $newTable = $new->getProperty('tableName');
     // Table name changed?
     if ($oldTable !== $newTable) {
         if ($oldTable && $this->getDatabase()->tableExists($oldTable, null, true)) {
             TableManipulation::renameTable($oldTable, $newTable);
             // TODO: notify attributes that the MetaModel has changed its table name.
         } else {
             TableManipulation::createTable($newTable);
         }
     }
     TableManipulation::setVariantSupport($newTable, $new->getProperty('varsupport'));
 }