Contao\Database\Updater::convertSingleField PHP Метод

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

Convert a single source field to UUIDs
public static convertSingleField ( string $table, string $field )
$table string The table name
$field string The field name
    public static function convertSingleField($table, $field)
    {
        $objDatabase = \Database::getInstance();
        // Get the non-empty rows
        $objRow = $objDatabase->query("SELECT id, {$field} FROM {$table} WHERE {$field}!=''");
        // Check the column type
        $objDesc = $objDatabase->query("DESC {$table} {$field}");
        // Change the column type
        if ($objDesc->Type != 'binary(16)') {
            $objDatabase->query("ALTER TABLE `{$table}` CHANGE `{$field}` `{$field}` binary(16) NULL");
            $objDatabase->query("UPDATE `{$table}` SET `{$field}`=NULL WHERE `{$field}`='' OR `{$field}`=0");
        }
        while ($objRow->next()) {
            $objHelper = static::generateHelperObject($objRow->{$field});
            // UUID already
            if ($objHelper->isUuid) {
                continue;
            }
            // Numeric ID to UUID
            if ($objHelper->isNumeric) {
                $objFile = \FilesModel::findByPk($objHelper->value);
                $objDatabase->prepare("UPDATE {$table} SET {$field}=? WHERE id=?")->execute($objFile->uuid, $objRow->id);
            } else {
                $objFile = \FilesModel::findByPath($objHelper->value);
                $objDatabase->prepare("UPDATE {$table} SET {$field}=? WHERE id=?")->execute($objFile->uuid, $objRow->id);
            }
        }
    }

Usage Example

Пример #1
0
 private function updateDbafsUuid()
 {
     // As of Contao 3.2 assisted fileTree widgets store tl_files.uuid instead of tl_files.id
     $arrConvertFields = array('single' => array('tl_form' => array('confirmationMailTemplate', 'formattedMailTemplate'), 'tl_form_field' => array('efgBackSingleSRC')), 'multiple' => array('tl_form' => array('confirmationMailAttachments', 'formattedMailAttachments'), 'tl_form_field' => array('efgMultiSRC')));
     foreach ($arrConvertFields['single'] as $strTable => $arrFields) {
         foreach ($arrFields as $strField) {
             \Contao\Database\Updater::convertSingleField($strTable, $strField);
         }
     }
     foreach ($arrConvertFields['multiple'] as $strTable => $arrFields) {
         foreach ($arrFields as $strField) {
             \Contao\Database\Updater::convertMultiField($strTable, $strField);
         }
     }
 }