วิธีการโยกย้ายไปยัง Drupal 8 จากแหล่ง SQL ใน 6 ขั้นตอนง่ายๆ
เผยแพร่แล้ว: 2020-11-24มีการพูดคุยกันมากมายเกี่ยวกับความสำคัญและประโยชน์ของการย้ายไปยัง Drupal 8 การโยกย้าย Drupal เป็นส่วนที่สำคัญที่สุดของเวิร์กโฟลว์การพัฒนา เราจำเป็นต้องตรวจสอบให้แน่ใจว่าเนื้อหาได้รับการถ่ายโอนอย่างราบรื่นโดยไม่สูญเสียข้อมูลสำคัญของผู้ใช้และข้อมูล ตรวจสอบคู่มือฉบับสมบูรณ์นี้สำหรับการโยกย้าย Drupal 7 ไปยัง Drupal 8 ที่ประสบความสำเร็จ
มีหลายวิธีในการโยกย้ายไปยัง Drupal 8 โดยใช้แหล่งต่างๆ เราได้เขียนเกี่ยวกับวิธีการย้ายจาก CSV เป็น Drupal 8 แล้ว แหล่งข้อมูลอื่นๆ ได้แก่ SQL, XML, JSON เป็นต้น ในบล็อกนี้ เราจะพูดถึงเรื่องการโยกย้ายไปยัง Drupal 8 โดยใช้ SQL เป็นแหล่งข้อมูล

ทำไมต้องเป็น SQL?
ในขณะที่การเลือกแหล่งข้อมูลส่วนใหญ่ขึ้นอยู่กับแหล่งที่มาของข้อมูลที่มีอยู่ซึ่งจำเป็นต้องย้าย สาเหตุทั่วไปบางประการในการเลือกแหล่งข้อมูล SQL สำหรับการย้ายข้อมูล Drupal 8 ได้แก่:
- ง่ายต่อการเขียนแบบสอบถามเพื่อรับข้อมูลที่ต้องการโดยเชื่อมต่อกับฐานข้อมูล
- การย้ายข้อมูลจากเซิร์ฟเวอร์หนึ่งไปยังอีกเซิร์ฟเวอร์หนึ่งจะเร็วกว่าวิธีอื่น
- ลดการใช้โมดูลที่สนับสนุนจำนวนมาก
- ไม่จำเป็นต้องส่งออกข้อมูลมุมมองซึ่งใช้สำหรับการส่งออกข้อมูลมุมมอง CSV จากไซต์ Drupal 7
- เราจะไม่ต้องการช่องรหัสผ่าน Views ซึ่งใช้สำหรับการย้ายข้อมูลที่สำคัญ (รหัสผ่านเป็นแฮช) เนื่องจากเราใช้การสืบค้นฐานข้อมูล
- ไม่จำเป็นต้องย้ายโมดูล CSV ต้นทาง เนื่องจากเราใช้ซอร์สของ SQL
เริ่มกระบวนการย้ายถิ่นได้!
ในบล็อกนี้ เราจะย้ายผู้ใช้ไปยังไซต์ Drupal 8 ต่อไปนี้เป็นขั้นตอนที่เราจะดำเนินการเพื่อย้ายไปยัง Drupal 8 -
1. สร้างโมดูลที่กำหนดเองสำหรับการโยกย้าย
2. อ้างอิงฐานข้อมูลต้นทาง
3. กำหนดการย้าย YML และแมปฟิลด์ Drupal ที่ระบุ
4. สร้างปลั๊กอินต้นทางสำหรับการย้ายข้อมูล
5. ประมวลผลฟิลด์ค่าเดียว หลายค่า และที่อยู่
6. เรียกใช้การย้ายข้อมูลโดยใช้เครื่องมือบรรทัดคำสั่ง drush
ขั้นตอนที่ 1: สร้างโมดูลที่กำหนดเองสำหรับการโยกย้าย Drupal 8
ขั้นแรก ให้สร้างโมดูลที่กำหนดเองตามที่คุณสร้างใน Drupal 8 ตรวจสอบบล็อกโดยละเอียดสำหรับการสร้างโมดูลที่กำหนดเองใน Drupal 8 ที่นี่ เรากำลังสร้างโมดูลที่เรียกว่า " company Employee migrate " โครงสร้างโมดูลมีดังนี้:

company_employee_migrate.info.yml : ประกอบด้วยข้อมูลพื้นฐานเกี่ยวกับโมดูลและการอ้างอิง
company_employee_migrate.install : ใช้สำหรับเขียนสคริปต์ PHP ที่ควรทริกเกอร์ขณะติดตั้งและถอนการติดตั้งโมดูล ในกรณีของเรา เรากำลังลบการกำหนดค่าการย้ายข้อมูลเมื่อโมดูลถูกถอนการติดตั้ง ดูภาพหน้าจอด้านล่างสำหรับสคริปต์

company_employee_migrate.module : ใช้สำหรับกำหนด hooks ทั่วไปสำหรับไซต์ สิ่งเหล่านี้เป็นสิ่งเบื้องต้นที่จำเป็นสำหรับโมดูล เราจะอธิบายส่วนที่เหลือในขั้นตอนต่อไป
ขั้นตอนที่ 2: อ้างอิงฐานข้อมูลต้นทาง
ต่อไป เราต้องตั้งค่าฐานข้อมูลต้นทางจากที่ที่เราจะดึงข้อมูล อัปเดตไฟล์ settings.php สำหรับไซต์ Drupal ของคุณโดยย้ายไปที่ webroot -> sites -> default -> settings.php
เพิ่มการเชื่อมต่อฐานข้อมูลใหม่ด้านล่างการเชื่อมต่อเริ่มต้นตามที่แสดงในภาพหน้าจอด้านล่าง “ migrate ” เป็นกุญแจสำคัญสำหรับฐานข้อมูลต้นทาง

ขั้นตอนที่ 3: กำหนดการย้าย YML และแมปฟิลด์ Drupal
ตอนนี้ เราต้องระบุฟิลด์ที่เราต้องการย้ายและแมปฟิลด์เหล่านั้นใน yml การย้ายข้อมูล ในตัวอย่างนี้ เรากำลังย้าย ID ผู้ใช้ ชื่อผู้ใช้ รหัสผ่าน อีเมล สถานะ การประทับเวลาที่สร้าง ชื่อ นามสกุล บทบาทงาน ที่อยู่ทางไปรษณีย์ ฯลฯ
หลังจากระบุฟิลด์ เราจำเป็นต้องกำหนดการย้ายที่ migrate_plus.migration.company_employee.yml ตอนนี้ มาดูการโยกย้าย yml และการแมปอย่างละเอียดยิ่งขึ้น

id: รหัส เฉพาะสำหรับการย้าย yml
label: ชื่อที่แสดงสำหรับการโยกย้าย
migration_group: ชื่อกลุ่มการย้ายข้อมูล
แหล่งที่มา: ชื่อคำอธิบายประกอบของปลั๊กอินต้นทางการย้ายข้อมูล สิ่งนี้จะถูกกำหนดในคำอธิบายประกอบ @MigrateSource ใน src/Plugin/migrate/source/CompanyEmployee.php
ปลายทาง: ชื่อของปลั๊กอินปลายทางการย้ายข้อมูล ในกรณีนี้ มันคือเอนทิตี:ผู้ใช้ เนื่องจากเรากำลังย้ายเอนทิตีผู้ใช้
กระบวนการ: ในกระบวนการ เราจะทำการแมปฟิลด์ Drupal กับฟิลด์ต้นทาง ค่าด้านซ้ายคือชื่อเครื่องของฟิลด์ และค่าด้านขวาคือชื่อฟิลด์ที่เราส่งผ่านจากปลั๊กอินต้นทาง
Migration_dependencies: นี่เป็นคีย์ทางเลือก จะใช้เฉพาะในกรณีที่มีการพึ่งพาการย้ายข้อมูลอื่นๆ
ขั้นตอนที่ 4: สร้างปลั๊กอินต้นทางสำหรับการย้ายข้อมูล
ปลั๊กอินแหล่งที่มาของการย้ายข้อมูลเป็นหัวใจสำคัญของการย้ายข้อมูล SQL ด้านล่างนี้คือคำอธิบายโดยละเอียดสำหรับปลั๊กอินต้นทาง

- สามารถสร้างซอร์สปลั๊กอินได้ที่ src/Plugin/migrate/source/CompanyEmployee.php
- เนมสเปซจะเป็น Drupal\company_employee_migrate\Plugin\migrate\source
- คำอธิบายประกอบ @MigrateSource ประกอบด้วยรหัสปลั๊กอินต้นทางที่เราแมปในข้อกำหนดการย้ายข้อมูล
- เรากำลังขยายคลาส Abstract SqlBase ที่ จัดเตรียมโดยโมดูลการย้ายข้อมูลหลัก
ดูภาพหน้าจอด้านล่างสำหรับการอ้างอิง

ปลั๊กอินต้นทางต้องใช้สามวิธีต่อไปนี้ -
query() : สิ่งนี้จะส่งคืนข้อมูลเขตข้อมูลต้นทางโดยเชื่อมต่อกับฐานข้อมูลต้นทาง ดูภาพหน้าจอด้านล่างซึ่งจะส่งคืนข้อมูลในฟิลด์ที่ ID ผู้ใช้มากกว่า 0 และอีเมลของผู้ใช้ลงท้ายด้วย “@phyins.com”

field() : วิธีนี้จะคืนค่าฟิลด์ที่มีอยู่ในแหล่งที่มา ด้านล่างนี้ ฉันได้เพิ่มข้อมูลโค้ดสำหรับรายการฟิลด์ที่พร้อมใช้งานพร้อมกับ baseFields()

getIds() : วิธีนี้จะส่งคืน ID ที่ไม่ซ้ำสำหรับแถวต้นทาง โค้ดด้านล่างจะส่งคืน ID ผู้ใช้ที่เป็นจำนวนเต็มประเภท เนื่องจาก uid จะไม่ซ้ำกันสำหรับผู้ใช้แต่ละราย

นอกจากวิธีการดังกล่าวแล้ว เรายังมี:
prepareRow() : เมธอดนี้จะถูกเรียกหนึ่งครั้งสำหรับแต่ละแถว เรากำลังโหลดข้อมูลที่นี่จากตารางและกระบวนการต่างๆ ตามความต้องการ คุณสมบัติใดๆ ที่เราสร้างโดยใช้ $row->setSourceProperty จะพร้อมใช้งานในขั้นตอนของกระบวนการ เราจะใช้การสืบค้น Drupal 8 DB เพื่อรับข้อมูลใน prepareRow()
baseFields() : จะมีอาร์เรย์ของฟิลด์พื้นฐานจาก “users_field_data ” ที่สามารถใช้ได้โดยเมธอด query() ค้นหารหัสในภาพด้านล่าง

ขั้นตอนที่ 5: ประมวลผลฟิลด์ค่าเดียว หลายค่า และที่อยู่
ใน Drupal เรามีฟิลด์ประเภทต่างๆ และการประมวลผลบางฟิลด์อาจมีความยุ่งยากเล็กน้อยสำหรับนักพัฒนาในขณะย้ายข้อมูลเนื้อหา ฉันได้เพิ่มข้อมูลโค้ดสำหรับบางฟิลด์ด้านล่าง:
ฟิลด์ค่าเดียว : ฟิลด์ เหล่านี้รวมถึงฟิลด์ข้อความ ฟิลด์บูลีน อีเมล ฯลฯ ค้นหาข้อมูลโค้ดด้านล่างเพื่อรับฟิลด์ค่าเดียว ที่นี่ field_first_name สามารถกำหนดได้ดังนี้

ฟิลด์หลายค่า: ฟิลด์ เหล่านี้รวมถึงบทบาทของผู้ใช้ บทบาทงาน ฟิลด์การเลือกค่าหลายค่า กล่องกาเครื่องหมาย ฯลฯ สำหรับฟิลด์หลายค่า เราจำเป็นต้องส่งคืนอาเรย์ที่เชื่อมโยง ค้นหาข้อมูลโค้ดด้านล่างสำหรับฟิลด์ "บทบาท"

ฟิลด์ที่อยู่: การ ย้ายฟิลด์ที่อยู่ที่ได้รับจากโมดูลที่อยู่จะแตกต่างจากการย้ายฟิลด์อื่นเล็กน้อย เราจำเป็นต้องประมวลผลข้อมูลที่ สืบค้นล่วงหน้าใน อาเรย์ที่เชื่อมโยงด้วยคีย์ที่เหมาะสมดังที่แสดงด้านล่างสำหรับ field_mailing_address

ตอนนี้พร้อมแล้วที่จะเรียกใช้การย้ายข้อมูลโดยการติดตั้งโมดูล company_employee_migrate ในไซต์ Drupal 8
ขั้นตอนที่ 6: เรียกใช้การย้ายข้อมูลโดยใช้เครื่องมือบรรทัดคำสั่ง drush
ในที่สุด เราก็พร้อมสำหรับการโยกย้าย SQL ของเรา ในการเรียกใช้การย้ายข้อมูล เราต้องติดตั้ง drush (หากคุณยังไม่ได้ใช้งาน)
รายการคำสั่ง drush ที่มีประโยชน์สำหรับการโยกย้าย Drupal:
drush migrate-status : ซึ่งจะคืนค่าสถานะการย้ายข้อมูลพร้อมรายละเอียด

drush migrate-import migration_id : สิ่งนี้จะนำเข้าข้อมูลจากแหล่งที่มาไปยังไซต์

drush migrate-reset-status migration_id : หากการดำเนินการของสคริปต์หยุดหรือหยุดชั่วคราว สถานะการย้ายจะแสดงเป็น "กำลังนำเข้า" คำสั่งนี้จะรีเซ็ตสถานะการย้ายข้อมูลเป็น "ไม่ได้ใช้งาน" เพื่อให้เราสามารถดำเนินการนำเข้าการย้ายข้อมูลได้

drush migrate-rollback migration_id : ใช้สำหรับย้อนกลับเป็นสถานะก่อนหน้า
