Score:0

ข้อผิดพลาด SQL เมื่อพยายามลบฟิลด์ประเภทเนื้อหา

ธง np

ฉันพยายามสร้างประเภทเนื้อหาใหม่สำหรับไซต์ของฉัน และฉันเลือกชื่อฟิลด์ ("คำอธิบาย") ที่ใช้อยู่แล้วสำหรับเนื้อหาประเภทอื่น

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

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

เมื่อพยายามลบฟิลด์ดังกล่าว ฉันไปที่ ผู้ดูแลระบบ/โครงสร้าง/ประเภท/จัดการ/my_custom_content_type/fields และใช้ตัวเลือก UI ที่เลือก "ลบ"

จากนั้น UI ของผู้ดูแลระบบแสดงให้ฉันเห็นหน้าจอซึ่งแสดงการเปลี่ยนแปลงที่ฉันกำลังจะทำ และเมื่อฉันเลือก "ยอมรับ" ไซต์ของฉันจะพาฉันไปที่หน้าว่างพร้อมข้อความ: "เว็บไซต์พบข้อผิดพลาดที่ไม่คาดคิด ลองดูสิ อีกครั้งในภายหลัง."

เมื่อฉันตรวจสอบบันทึก นี่คือข้อความแสดงข้อผิดพลาดที่ฉันเห็น:

[06-พ.ย.-2021 03:07:49] คำเตือน: [pool www] child 2014 กล่าวใน stderr: "NOTICE: PHP message: Uncaught PHP Exception Drupal\Core\Database\DatabaseExceptionWrapper: "SQLSTATE[42S22]: ไม่พบคอลัมน์ : 1054 คอลัมน์ที่ไม่รู้จัก 'field_description_teaser_value' ใน 'where clause': SELECT 1 AS expression"
[06-พ.ย.-2021 03:07:49] คำเตือน: [pool www] child 2014 กล่าวใน stderr: "FROM"
[06-พ.ย.-2021 03:07:49] คำเตือน: [pool www] child 2014 กล่าวใน stderr: "{node_revision__field_description} t"
[06-พ.ย.-2021 03:07:49] คำเตือน: [pool www] child 2014 กล่าวใน stderr: "WHERE (field_description_teaser_value IS NOT NULL) OR (field_description_teaser_format IS NOT NULL) OR (field_description_hidden_value is not NULL) OR (field_description_hidden_format IS ไม่เป็นโมฆะ)"
[06-พ.ย.-2021 03:07:49] คำเตือน: [pool www] child 2014 กล่าวใน stderr: "LIMIT 1 OFFSET 0; Array"
[06-พ.ย.-2021 03:07:49] WARNING: [pool www] child 2014 said into stderr: "("
[06-พ.ย.-2021 03:07:49] คำเตือน: [pool www] child 2014 กล่าวใน stderr: ")"
[06-พ.ย.-2021 03:07:49] คำเตือน: [pool www] child 2014 กล่าวใน stderr: "" ที่บรรทัด /var/www/html/web/core/lib/Drupal/Core/Database/Connection.php 701"
2021/11/06 03:07:49 [ข้อผิดพลาด] 2010#2010: *21776 FastCGI ส่งใน stderr: "ข้อความ PHP: Uncaught PHP Exception Drupal\Core\Database\DatabaseExceptionWrapper: "SQLSTATE[42S22]: ไม่พบคอลัมน์: 1054 คอลัมน์ที่ไม่รู้จัก 'field_description_teaser_value' ใน 'where clause': SELECT 1 AS expression
จาก
{node_revision__field_description} เ
โดยที่ (field_description_teaser_value ไม่เป็นโมฆะ) หรือ (field_description_teaser_format ไม่เป็นโมฆะ) หรือ (field_description_hidden_value ไม่เป็นโมฆะ) หรือ (field_description_hidden_format ไม่เป็นโมฆะ)
ลิมิต 1 ออฟเซ็ต 0; อาร์เรย์
(
)
" ที่ /var/www/html/web/core/lib/Drupal/Core/Database/Connection.php บรรทัด 701" ขณะอ่านส่วนหัวการตอบสนองจากอัปสตรีม ไคลเอ็นต์: 172.18.0.6 เซิร์ฟเวอร์: คำขอ: "GET /admin/ โครงสร้าง/ประเภท/การจัดการ/my_custom_content_type/fields/node.my_custom_content_type.field_description/storage HTTP/1.1", อัปสตรีม: "fastcgi://unix:/run/php-fpm.sock:", โฮสต์: "custom-site.ddev .site", ผู้อ้างอิง: "https://custom-site.ddev.site/admin/structure/types/manage/my_custom_content_type/fields"

เมื่อเปิดตัว phpmyadminไม่มีชื่อคอลัมน์ที่แสดงในส่วนคำสั่ง where node_revision__field_description ตารางเนื่องจากคอลัมน์เหล่านั้นถูกสร้างขึ้นสำหรับเขตข้อมูลประเภทอื่น

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

คำถามของฉันคือ มีวิธีที่ปลอดภัยในการลบประเภทเนื้อหาโดยใช้ SQL หรือ drush หรือไม่ ฉันพยายามลบออกผ่านอินเทอร์เฟซผู้ดูแลระบบ แต่ผลลัพธ์มีข้อผิดพลาดเดียวกันกับตอนที่ฉันพยายามลบฟิลด์นี้

cn flag
ตอนแรกคุณพยายามลบมันอย่างไร? คุณควรใช้การจัดการ UI/config ของผู้ดูแลระบบก่อนเสมอ
pazitos10 avatar
np flag
@PatrickKenny ขอบคุณสำหรับความคิดเห็น ฉันอัปเดตคำถามของฉันโดยเพิ่มการชี้แจง แต่ tl;dr จะเป็น: เพื่อพยายามลบออก ฉันใช้การจัดการ UI/config ของผู้ดูแลระบบ
Score:0
ธง np

ฉันจัดการเพื่อแก้ปัญหาของฉันโดยเพิ่มคอลัมน์ที่ขาดหายไปลงในตารางที่เกี่ยวข้องกับการใช้ด้วยตนเอง phpmyadmin.

อันดับแรก:

  • สร้างการสำรองข้อมูล db (ในกรณี)

ประการที่สอง ฉันสร้างสำเนาของตารางที่เกี่ยวข้องและย้ายสำเนาดังกล่าวไปยังฐานข้อมูลอื่นที่รักษาทั้งข้อมูลและโครงสร้าง:

  • node_revision__field_description
  • node__field_description

เมื่อสำรองข้อมูลเสร็จแล้ว ฉันดำเนินการสร้างคอลัมน์ที่ขาดหายไปและคัดลอกแอตทริบิวต์จากคอลัมน์ที่คล้ายกันในตารางอื่นๆ (สร้างขึ้นสำหรับประเภทเนื้อหาอื่นๆ)

จากนั้น ฉันลบประเภทเนื้อหาผ่าน UI ของผู้ดูแลระบบโดยไม่มีปัญหาใดๆ

สุดท้ายนี้ ฉันกู้คืนสำเนาต้นฉบับของตารางไปยัง db โดยแทนที่เวอร์ชันที่แก้ไขแล้ว

ฉันรู้ว่านี่อาจไม่ใช่ทางออกที่ดีที่สุดสำหรับทุกคน แต่ได้ผลสำหรับฉัน

โพสต์คำตอบ

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