UXDM ช่วยให้นักพัฒนาย้ายข้อมูลจากระบบหนึ่งหรือรูปแบบไปยังอีกระบบหนึ่ง

UXDM สามารถติดตั้งได้อย่างง่ายดายโดยใช้นักแต่งเพลง เพียงเรียกใช้คำสั่งต่อไปนี้จากรูทของโครงการของคุณ
composer require divineomega/uxdm
หากคุณไม่เคยใช้ตัวจัดการการพึ่งพานักแต่งเพลงมาก่อนให้ไปที่เว็บไซต์นักแต่งเพลงสำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีเริ่มต้นใช้งาน
สร้างไฟล์ 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 Core ในขณะที่ส่วนอื่น ๆ มีให้บริการเป็นแพ็คเกจแยกต่างหาก
วัตถุต้นทางและปลายทางสามารถใช้ในการรวมกันใด ๆ ข้อมูลสามารถย้ายจาก CSV และแทรกลงในฐานข้อมูลได้อย่างง่ายดายเช่นเดียวกับข้อมูลที่สามารถย้ายจากฐานข้อมูลไปยัง CSV ได้อย่างง่ายดาย
นอกจากนี้คุณยังสามารถใช้วัตถุต้นทางและวัตถุปลายทางที่คล้ายกันในการย้ายถิ่นเดียวกัน ตัวอย่างเช่นการใช้ UXDM ทั่วไปคือการใช้แหล่งกำเนิด PDO และปลายทาง PDO เพื่อถ่ายโอนข้อมูลจากฐานข้อมูลหนึ่งไปยังอีกแหล่งหนึ่ง
โปรดดูหน้าแหล่งที่มาและจุดหมายปลายทางสำหรับแหล่งข้อมูลและจุดหมายปลายทางเพิ่มเติมและเอกสารรายละเอียดเกี่ยวกับการใช้งาน
ตัวอย่างของฐานข้อมูลพื้นฐานไปยังฐานข้อมูลการย้ายข้อมูล 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 ใช้แพ็คเกจ Omega Validator ดูเอกสารสำหรับกฎการตรวจสอบความถูกต้องทั้งหมด
ตัวอย่างนี้แสดงให้เห็นว่า UXDM สามารถแมปชื่อฟิลด์จากต้นทางไปยังปลายทางได้อย่างไร
$ migrator = new Migrator ;
$ migrator -> setSource ( $ pdoSource )
-> setDestination ( $ pdoDestination )
-> setFieldsToMigrate ([ ' id ' , ' email ' , ' name ' ])
-> setKeyFields ([ ' id ' ])
-> setFieldMap ([ ' name ' => ' full_name ' ])
-> withProgressBar ()
-> migrate (); การโยกย้ายนี้จะย้ายข้อมูลจากฟิลด์ name ต้นฉบับไปยังฟิลด์ปลายทาง 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 ที่ถูกลบออก