UXDM membantu pengembang memigrasikan data dari satu sistem atau format ke yang lain.

UXDM dapat dengan mudah diinstal menggunakan komposer. Cukup jalankan perintah berikut dari akar proyek Anda.
composer require divineomega/uxdm
Jika Anda belum pernah menggunakan Manajer Ketergantungan Komposer sebelumnya, pergilah ke situs web Composer untuk informasi lebih lanjut tentang cara memulai.
Buat file PHP baru untuk berisi kode migrasi UXDM Anda. Dalam contoh ini, kami akan menyebutnya user-csv-import.php . Ingatlah untuk menambahkan require 'vendor/autoload.php' dan pernyataan use yang relevan, jika perlu.
Buat Sumber dan Objek Tujuan Anda. Contoh ini menggunakan sumber CSV dan tujuan PDO (database).
$ 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 dari baris perintah dan akan mendapatkan bilah kemajuan yang bagus.Lihat bagian di bawah ini untuk informasi lebih lanjut tentang sumber dan objek tujuan yang tersedia, dan contoh penggunaan yang lebih maju.
Setiap migrasi UXDM membutuhkan objek sumber dan setidaknya satu objek tujuan. Ini menentukan di mana dan bagaimana data dibaca dan ditulis. Paket UXDM bekerja dengan berbagai sumber dan objek tujuan, termasuk yang berikut.
Beberapa di antaranya adalah paket inti UXDM, sementara yang lain tersedia sebagai paket terpisah.
Objek sumber dan tujuan dapat digunakan dalam kombinasi apa pun. Data dapat dimigrasi dari CSV dan dimasukkan ke dalam database, semudah data dapat dimigrasi dari database ke CSV.
Anda juga dapat menggunakan objek sumber dan tujuan serupa dalam migrasi yang sama. Misalnya, penggunaan UXDM yang umum adalah menggunakan sumber PDO dan tujuan PDO untuk mentransfer data dari satu database ke database lainnya.
Silakan lihat halaman Sumber & Tujuan untuk lebih banyak sumber dan tujuan, dan dokumentasi terperinci tentang penggunaannya.
Contoh database dasar ke migrasi UXDM database ditunjukkan di bawah ini.
$ 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 (); Migrasi ini akan memindahkan bidang id , email dan name dari tabel users di basis data old-test , ke tabel new_users di database new-test , mengganti catatan yang ada dengan id yang sama (bidang kunci).
Anda dapat menggunakan UXDM untuk memvalidasi data sumber. Jika validasi gagal sebagian melalui migrasi, migrasi akan berhenti dan ValidationException akan dilemparkan. Namun, jika ->validateBeforeMigrating() dipanggil, semua baris data akan divalidasi terlebih dahulu sebelum migrasi dimulai.
Kode di bawah ini menunjukkan cara memvalidasi berbagai bidang.
$ 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 ();Migrasi ini akan memvalidasi data sumber cocok dengan aturan validasi yang ditentukan.
UXDM menggunakan paket omega validator. Lihat dokumentasinya untuk semua aturan validasi yang tersedia.
Contoh ini menunjukkan bagaimana UXDM dapat memetakan nama bidang dari sumber ke tujuan.
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> setFieldMap ([ ' name ' => ' full_name ' ])
-> withProgressBar ()
-> migrate (); Migrasi ini akan memindahkan data dari bidang name sumber ke bidang full_name tujuan, sambil tetap memindahkan id dan bidang email secara normal.
Terkadang data yang ingin Anda pindahkan dari sumber ke tujuan perlu diubah. Ini dapat mengubah item data yang ada, menambahkan item data baru, atau menghapus item yang tidak Anda butuhkan.
UXDM memungkinkan Anda untuk membuat satu atau lebih objek transformator, dan menambahkannya ke migrasi. Lihat contoh -contoh berikut tentang cara menggunakan transformator untuk memanipulasi data Anda.
Contoh ini menunjukkan bagaimana Anda dapat mengubah item data yang ada selama migrasi.
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 ();Migrasi ini akan memastikan bahwa semua bidang nama memiliki kasus yang konsisten.
Contoh ini menunjukkan bagaimana Anda dapat menambahkan item data baru saat migrasi sedang berlangsung.
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 (); Migrasi ini akan menambahkan nomor acak ke dalam bidang yang disebut random_number untuk setiap baris data. Ini kemudian akan dimigrasi ke database tujuan bersama dengan bidang lainnya.
Contoh ini menunjukkan bagaimana item data dapat dihapus dari baris data. Anda mungkin ingin melakukan ini jika Anda ingin menggunakan nilainya, tetapi tidak benar -benar bermigrasi ke tujuan.
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 (); Migrasi ini mendapatkan data dari bidang email di sumber, membuat item data email_hash baru yang berisi MD5 dari alamat email, dan kemudian menghapus item data email asli. email_hash baru ini kemudian akan dimigrasi ke database tujuan bersama dengan bidang lainnya, tidak termasuk bidang email yang dihapus.