Score:2

ปัญหาในการลบโมดูลการรวบรวมฟิลด์

ธง cn

เมื่อเร็ว ๆ นี้ เราย้ายสำเร็จในอินสแตนซ์ drupal 8 ของเราจากโมดูลการรวบรวมฟิลด์ (อัลฟ่าล่าสุด) ไปยังย่อหน้า ตอนนี้ฉันกำลังพยายามลบโมดูลการรวบรวมฟิลด์ออกจากอินสแตนซ์ drupal ของเรา แต่ไม่สามารถลบออกได้เนื่องจากเป็น "ใช้ในฟิลด์ field_collection_item.field_sprechzeiten_zeitraum" (ดูภาพหน้าจอจากมุมมองการถอนการติดตั้ง)

มีการป้องกันการถอนการติดตั้ง field_collection

เมื่อฉันพยายามลบฟิลด์นี้ field_sprechzeiten_zeitraumข้อความแสดงข้อผิดพลาดต่อไปนี้ปรากฏขึ้น:

Drupal\Core\Database\DatabaseExceptionWrapper: SQLSTATE[42S02]: ไม่พบตารางฐานหรือมุมมอง: 1146 ไม่มีตาราง 'druco_stage.field_collection_item__field_sprechzeiten_zeitraum': SELECT 'entity_id' FROM {field_collection_item__field_sprechzeiten_zeitraum} WHERE 'iten_prech' = อาร์เรย์ ( ) ใน field_collection_field_config_predelete() (บรรทัดที่ 95 ของ modules/contrib/field_collection/field_collection.module)

ดูเหมือนว่ามีคนพยายามลบสิ่งนี้ก่อนหน้านี้และมีบางอย่างผิดพลาด เนื่องจากรายการฐานข้อมูลถูกลบแต่ไม่ใช่ข้อมูลอ้างอิงอื่นๆ ทั้งหมด หรือรายการไม่ได้ถูกสร้างขึ้นตั้งแต่แรก

เนื่องจากฉันไม่ใช่ drupal dev และเพิ่งดูแลไซต์นี้ ฉันค่อนข้างไม่รู้ว่าจะจัดการกับมันอย่างไร ฉันแค่ต้องการให้โมดูล field_collection หายไป มีใครรู้วิธีแก้ปัญหานี้ไหม

hotwebmatter avatar
nr flag
ฉันดีใจที่คำตอบของฉันช่วยให้คุณไปในทิศทางที่ถูกต้อง! อย่างไรก็ตาม ตามที่ @leymannx แนะนำไว้ในความคิดเห็นด้านล่าง จะเป็นการดีกว่าที่จะตัดส่วน "แก้ไข:" ของคุณออกจากคำถามด้านบนและวางลงในคำตอบด้านล่าง แม้ว่าคุณจะยอมรับคำตอบของฉันแล้วก็ตาม สิ่งนี้จะช่วยผู้คนในอนาคตที่แสวงหาวิธีแก้ปัญหาที่คล้ายกัน โปรดพิจารณา! ขอบคุณล่วงหน้า.
Score:1
ธง nr

คุณมีการสำรองฐานข้อมูลเก่าหรือไม่? คุณสามารถหมุนสำเนาของไซต์ในสภาพแวดล้อมการพัฒนาท้องถิ่นและกู้คืนฐานข้อมูลเวอร์ชันเก่าเพื่อดูว่าสามารถสร้างตารางที่ขาดหายไปได้หรือไม่ ทำให้คุณสามารถลบ field_collection โมดูล.

โดยทั่วไป เป็นความคิดที่ดีที่จะทำการเปลี่ยนแปลงโดยตรงในฐานข้อมูล (ซึ่งน่าจะเป็นสิ่งที่ใครบางคนสร้างปัญหาตั้งแต่แรก) แต่คุณอาจสร้างตารางเปล่าที่มีโครงสร้างเดียวกันได้โดยการวิเคราะห์ตารางใน การสำรองข้อมูลเก่า:

อธิบาย field_collection_item__field_sprechzeiten_zeitraum;

ด้วยข้อมูลนี้ คุณอาจสามารถสร้างโครงสร้างตารางที่ตรงกันในฐานข้อมูลการผลิต -- อีกครั้ง โดยทำงานในสำเนาในเครื่องแทนที่จะเป็นบนเซิร์ฟเวอร์ที่ใช้งานจริง

หากไม่มีการสำรองข้อมูลที่เหมาะสม คุณอาจใช้ field_collection โมดูลเพื่อเพิ่ม field_collection_item__field_sprechzeiten_zeitraum ไปที่ field_sprechzeiten กำ (คุณจะไม่สามารถสร้างเนื้อหาฟิลด์ใหม่ด้วยวิธีนี้ แต่คุณแค่พยายามลบมันออกไป)

เมื่อมีตารางที่ขาดหายไป (แม้ว่าจะว่างเปล่า) คุณอาจสามารถลบฟิลด์ได้โดยไม่มีข้อผิดพลาดและถอนการติดตั้งโมดูล ขอให้โชคดี.

Score:1
ธง cn

ฉันแก้ปัญหาด้วยการสร้างตารางใหม่ตามที่ hotwebmatter แนะนำ มันค่อนข้างง่ายเพราะฉันสามารถใช้โครงสร้างของฟิลด์คอลเลกชันฟิลด์อื่น ๆ และเพียงแค่เปลี่ยนชื่อฟิลด์ค่า โครงสร้างมีลักษณะดังนี้:

field_collection_item__field_sprechzeiten_zeitraum: ตาราง
+ คอลัมน์
    กำ: varchar (128)
    ลบแล้ว: tinyint(4) NN
    entity_id: int(10) เอ็นเอ็น
    revision_id: int(10)
    รหัสภาษา: varchar(32) NN
    เดลต้า: int(10) NN
    field_sprechzeiten_zeitraum_value: varchar(255)
+ ดัชนี
    มัด: ดัชนี (มัด) ประเภท btree
    revision_id: ดัชนี (revision_id) ประเภท btree
+ กุญแจ
    #1: PK (entity_id, ลบ, langcode, delta)

หลังจากสร้างสิ่งนี้ ฉันล้างเอนทิตีคอลเลกชันฟิลด์ (มีลิงก์ในส่วนการถอนการติดตั้ง) และลบฟิลด์ที่เหลือในประเภทเนื้อหาของฉัน ช่องทำเครื่องหมายเพื่อถอนการติดตั้งโมดูลยังคงปิดอยู่ ดังนั้นฉันจึงลบทุกตารางในฐานข้อมูลที่มี field_deleted_data และ field_deleted_revision สิ่งนี้ไม่ได้ช่วย ดังนั้นฉันจึงค้นหาในตารางการกำหนดค่าสำหรับบรรทัดที่มีชื่อ core.extension ที่นี่ ฉันยกเลิกการซีเรียลข้อมูล นำส่วนที่มีการรวบรวมฟิลด์ออก และทำให้เป็นอนุกรมอีกครั้ง

ในระหว่างนี้ฉันรันงาน cron และล้างแคชเสมอ ช่องทำเครื่องหมายเพื่อถอนการติดตั้งยังคงถูกปิดใช้งาน และบังเอิญฉันเห็นว่าช่องทำเครื่องหมายคอลเลกชันฟิลด์ในส่วนการติดตั้งโมดูลไม่ได้ถูกเลือกอีกต่อไป ฉันตรวจสอบและพยายามติดตั้ง มันเริ่มต้นขึ้นและฉันถูกส่งต่อไปยังส่วนการติดตั้งโมดูล คอลเลคชันฟิลด์ยังไม่ถูกเลือก และเมื่อฉันตรวจสอบแท็บถอนการติดตั้ง ในที่สุดมันก็หายไป

เรื่องนี้เหนื่อยมาก แต่ก็จบลงด้วยความสุข

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา