UXDM помогает разработчикам перенести данные из одной системы или формата в другую.

UXDM может быть легко установлен с помощью композитора. Просто запустите следующую команду из корня вашего проекта.
composer require divineomega/uxdm
Если вы никогда не использовали менеджер по зависимости композитора, отправляйтесь на веб -сайт Composer для получения дополнительной информации о том, как начать.
Создайте новый PHP -файл, чтобы содержать ваш код миграции UXDM. В этом примере мы назовем его user-csv-import.php . Не забудьте добавить require 'vendor/autoload.php' и соответствующие операторы use , если это необходимо.
Создайте объекты источника и назначения. В этом примере используется пункт назначения CSV и PDO (база данных).
$ csvSource = new CSVSource ( ' users.csv ' );
$ pdoDestination = new PDODestination ( new PDO ( ' mysql:dbname=test-database;host=127.0.0.1 ' , ' root ' , ' password ' ), ' users ' ); $ migrator = new Migrator ;
$ migrator -> setSource ( $ csvSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> withProgressBar ()
-> migrate ();php user-csv-import.php из командной строки и получить хороший панель прогресса.См. Разделы ниже для получения дополнительной информации о доступных объектах источника и назначения, а также более продвинутых примеров использования.
Каждая миграция UXDM требует исходного объекта и хотя бы одного объекта назначения. Они определяют, где и как данные читаются и написаны. Пакет UXDM работает с различными предметами источника и назначения, включая следующее.
Некоторые из них встроены в основной пакет UXDM, в то время как другие доступны в виде отдельных пакетов.
Источники и объекты назначения могут использоваться в любой комбинации. Данные можно перенести из CSV и вставлены в базу данных, так же легко, как данные можно перенести из базы данных в CSV.
Вы также можете использовать аналогичные объекты источника и назначения в той же миграции. Например, общее использование UXDM заключается в использовании источника PDO и назначения PDO для передачи данных из одной базы данных в другую.
Пожалуйста, смотрите страницу «Источники и направления» для получения дополнительной информации и пунктов назначения, а также подробную документацию об их использовании.
Пример базовой базы данных в базу данных Migration UXDM показан ниже.
$ pdoSource = new PDOSource ( new PDO ( ' mysql:dbname=old-test;host=127.0.0.1 ' , ' root ' , ' password123 ' ), ' users ' );
$ pdoDestination = new PDODestination ( new PDO ( ' mysql:dbname=new-test;host=127.0.0.1 ' , ' root ' , ' password456 ' ), ' new_users ' );
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> withProgressBar ()
-> migrate (); Эта миграция перенесет поля id , email и name из таблицы users в базе данных old-test , в таблицу new_users в базе данных new-test , заменив любые существующие записи тем же id (поле ключа).
Вы можете использовать UXDM для проверки исходных данных. Если валидация не пройдет в пути через миграцию, миграция остановится, а ValidationException будет выбрана. Однако, если будет вызван ->validateBeforeMigrating() , все строки данных будут превентивно подтверждены до начала миграции.
Код ниже показывает, как проверить различные поля.
$ pdoSource = new PDOSource ( new PDO ( ' mysql:dbname=old-test;host=127.0.0.1 ' , ' root ' , ' password123 ' ), ' users ' );
$ pdoDestination = new PDODestination ( new PDO ( ' mysql:dbname=new-test;host=127.0.0.1 ' , ' root ' , ' password456 ' ), ' new_users ' );
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setValidationRules ([
' id ' => [ new Required (), new IsNumeric ()],
' email ' => [ new Required (), new IsString (), new IsEmail ()],
' name ' => [ new Required (), new IsString ()],
])
// ->validateBeforeMigrating()
-> setKeyFields ([ ' id ' ])
-> withProgressBar ()
-> migrate ();Эта миграция подтвердит исходные данные соответствуют определенным правилам проверки.
UXDM использует пакет Validator Omega. Смотрите его документацию для всех доступных правил проверки.
В этом примере показано, как UXDM может отображать имена поля из источника в пункт назначения.
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> setFieldMap ([ ' name ' => ' full_name ' ])
-> withProgressBar ()
-> migrate (); Эта миграция переместит данные из поля name источника в поле contance full_name , при этом нормально перемещение поля id и email .
Иногда данные, которые вы хотите перейти из источника к назначению, нуждаются в преобразовании. Это может изменить существующие элементы данных, добавление новых элементов данных или удаление элементов, которые вам не нужны.
UXDM позволяет создавать один или несколько объектов трансформатора и добавлять их в миграцию. Смотрите следующие примеры того, как использовать трансформаторы для манипулирования вашими данными.
Этот пример показывает, как вы можете преобразовать существующие элементы данных во время миграции.
class NameCaseTransformer implements TransformerInterface
{
public function transform ( DataRow $ dataRow ): void
{
$ nameDataItem = $ dataRow -> getDataItemByFieldName ( ' name ' );
$ nameDataItem -> value = ucwords ( strtolower ( $ nameDataItem -> value ));
}
}
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> addTransformer ( new NameCaseTransformer ())
-> withProgressBar ()
-> migrate ();Эта миграция гарантирует, что все поля имен имеют последовательный случай.
В этом примере показано, как вы можете добавить новые элементы данных во время миграции.
class AddRandomNumberTransformer implements TransformerInterface
{
public function transform ( DataRow & $ dataRow ): void
{
$ dataRow -> addDataItem ( new DataItem ( ' random_number ' , rand ( 1 , 1000 )));
}
}
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> addTransformer ( new AddRandomNumberTransformer ())
-> withProgressBar ()
-> migrate (); Эта миграция добавит случайное число в поле, называемое random_number для каждой строки данных. Затем это будет перенесено в базу данных назначения вместе с другими полями.
Этот пример демонстрирует, как элементы данных могут быть удалены из строки данных. Вы можете сделать это, если хотите использовать ее значение, но на самом деле не переносит его в пункт назначения.
class EmailToHashTransformer implements TransformerInterface
{
public function transform ( DataRow $ dataRow ): void
{
$ emailDataItem = $ dataRow -> getDataItemByFieldName ( ' email ' );
$ dataRow -> addDataItem ( new DataItem ( ' email_hash ' , md5 ( $ emailDataItem -> value )));
$ dataRow -> removeDataItem ( $ emailDataItem );
}
}
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> addTransformer ( new EmailToHashTransformer ())
-> withProgressBar ()
-> migrate (); Эта миграция получает данные из поля email в источнике, создает новый элемент данных email_hash , который содержит MD5 адреса электронной почты, а затем удаляет исходный элемент данных email . Этот новый email_hash будет затем перенесен в базу данных назначения вместе с другими полями, за исключением снятого поля email .