يساعد 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 الأساسية ، في حين أن البعض الآخر متاح كحزم منفصلة.
يمكن استخدام كائنات المصدر والوجهة في أي مجموعة. يمكن ترحيل البيانات من 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 حزمة مصادقة أوميغا. انظر وثائقها لجميع قواعد التحقق من الصحة المتاحة.
توضح هذه الأمثلة كيف يمكن لـ 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 الذي تمت إزالته.