Score:0

ข้อผิดพลาด "เอนทิตีไม่ตรงกันและ/หรือคำจำกัดความของฟิลด์" ที่แปลกประหลาด

ธง tn

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

ขั้นแรก มีพื้นฐานเล็กน้อยเกี่ยวกับสิ่งที่ฉันกำลังทำอยู่ ฉันมีชุดการกำหนดค่าซึ่งรวมเป็นแพ็กเกจโดยใช้โมดูลคุณลักษณะและปรับใช้เป็นแพ็กเกจกับไซต์อื่นๆ ของเราจำนวนหนึ่ง ส่วนหนึ่งของชุดฟีเจอร์นี้คือประเภทฟีดจำนวนหนึ่งสำหรับนำเข้าเนื้อหาไปยังโหนด เมื่อฉันปรับใช้คุณลักษณะนี้บนไซต์ 1 แห่ง ฉันได้รับข้อผิดพลาด "เอนทิตีที่ไม่ตรงกันและ/หรือคำจำกัดความของฟิลด์" สำหรับฟิลด์ feeds_item ในไซต์อื่นที่ฉันปรับใช้ ฉันไม่พบข้อผิดพลาดใดๆ ความจริงที่ว่ามันผิดพลาดในอันหนึ่ง แต่ไม่ใช่อีกอันนั้นแปลก

คำจำกัดความของเอนทิตีและ/หรือฟิลด์ที่ไม่ตรงกัน

ฉันติดตามปัญหาไปที่ SqlContentEntityStorageSchema::requiresFieldStorageSchemaChanges. โดยเฉพาะอย่างยิ่งสิ่งที่เกิดขึ้นคือมูลค่าของ $installed_schema เป็นอาร์เรย์ว่างบนไซต์ที่มีข้อผิดพลาด แต่มีข้อมูลบนไซต์โดยไม่มีข้อผิดพลาด

  /**
   * {@inheritdoc}
   */
  ฟังก์ชันสาธารณะต้องการFieldStorageSchemaChanges (FieldStorageDefinitionInterface $storage_definition, FieldStorageDefinitionInterface $original) {
    $table_mapping = $this->getTableMapping($this->entityType);

    ถ้า (
      $storage_definition->hasCustomStorage() != $original->hasCustomStorage() ||
      $storage_definition->getSchema() != $original->getSchema() ||
      $storage_definition->isRevisionable() != $original->isRevisionable() ||
      $table_mapping->allowsSharedTableStorage($storage_definition) != $table_mapping->allowsSharedTableStorage($original) ||
      $table_mapping->requiresDedicatedTableStorage($storage_definition) != $table_mapping->requiresDedicatedTableStorage($เดิม)
    ) {
      กลับ TRUE;
    }

    ถ้า ($storage_definition->hasCustomStorage()) {
      // ฟิลด์มีที่เก็บข้อมูลแบบกำหนดเอง ดังนั้นเราจึงไม่ทราบว่ามีการเปลี่ยนสคีมาหรือไม่
      // จำเป็นหรือไม่ แต่เนื่องจากการตรวจสอบเบื้องต้นก่อนหน้านี้
      // ฟังก์ชัน ไม่มีอะไรเปลี่ยนแปลงเกี่ยวกับคำจำกัดความที่เราจัดการ เรา
      // ส่งคืน FALSE
      กลับ FALSE;
    }

    $current_schema = $this->getSchemaFromStorageDefinition($storage_definition);
    $this->processFieldStorageSchema($current_schema);
    $installed_schema = $this->loadFieldSchemaData($เดิม);
    $this->processFieldStorageSchema($installed_schema);

    ส่งคืน $current_schema != $installed_schema;
  }

ถ้าตรวจภายใน คีย์_ค่า ตารางที่มีแบบสอบถามเหล่านี้ เลือก * จาก key_value โดยที่คอลเล็กชัน เช่น 'entity.storage_schema.sql' และตั้งชื่อ เช่น 'node.field_schema_data.feeds_item' มันว่างเปล่าเช่นกันใน 1 แต่ไม่ใช่อีกอัน:

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

หมายเหตุ ไซต์ที่มีข้อผิดพลาดกำลังทำงานบน Drupal 9.2.10 ในขณะที่ไซต์ทำงานโดยไม่มีข้อผิดพลาด 9.2.11 แต่ฉันไม่แน่ใจว่านั่นสร้างความแตกต่าง

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

โพสต์คำตอบ

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