Score:-1

จะตรวจสอบได้อย่างไรว่าฟิลด์ชื่อเอนทิตีของฉันเขียนลงในตารางฐานข้อมูลที่จำเป็นและไม่มีฟิลด์อื่นเขียนอยู่

ธง my

ฉันมีเอนทิตีที่เรียกว่าผลิตภัณฑ์ของเอนทิตี และเอนทิตีนี้มีแบบฟอร์ม หากคุณเปลี่ยนฟิลด์ Title ในแบบฟอร์มนี้ Drupal จะบันทึกค่าใหม่ของฟิลด์นี้โดยอัตโนมัติในตารางที่เหมาะสมในฐานข้อมูล แต่นอกจากนี้ ฉันยังบันทึกการเปลี่ยนแปลงฟิลด์ Title ในส่วน แบบฟอร์มไปยังตารางฐานข้อมูลอื่น ผลิตภัณฑ์_ผลิตภัณฑ์ โดยสร้าง _custom_product_save_title การทำงาน. มันจำเป็น. และฟังก์ชันนี้ถูกเรียกใช้ใน hook_ENTITY_TYPE_update() ซึ่งติดตามการเปลี่ยนแปลงในผลิตภัณฑ์ของเอนทิตี

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

ฟังก์ชัน _custom_product_save_title($custom_product_id, $entity_product_title) {

  ถ้า (isset($fields['url']) && $fields['url'] == '') {
    ถ้า (isset($fields['name'])) {
      $fields['url'] = strtolower(str_replace(' ', '-', $fields['ชื่อ']));
    }
  }
  $id = $form_state->getValue('รหัส');
  ถ้า (!empty($form_state->getValue('cid'))) {
    $query = $this->connection->update($this->getTableName())
      ->condition('cid', $form_state->getValue('cid'));
  }
  อื่น {
    $query = $this->connection->insert($this->getTableName());
  }
  $result = $แบบสอบถาม
    -> เขตข้อมูล ($ เขตข้อมูล)
    ->ดำเนินการ ();
  ถ้า (!$id) {
    $id = ผลลัพธ์ $;
  }
 
  แคช::invalidateTags([
    "ผลิตภัณฑ์:" . $form_state->getValue('รหัส'),
  ]);

  แคช::invalidateTags([
    "ผลิตภัณฑ์:$custom_product_id",
  ]);

  ถ้า (!$custom_product_id) {
    แคช::invalidateTags([
      "รายการสินค้า",
    ]);
  }

}

/**
 * ใช้ hook_ENTITY_TYPE_update()
 */
ฟังก์ชัน product_admin_node_update (\Drupal\Core\Entity\EntityInterface $entity) {
  ถ้า ($entity->bundle() == 'ผลิตภัณฑ์') {
    $custom_product_id = $entity->get('field_product_cid')->value;
    $entity_product_title = $entity->getTitle();
    _custom_product_save_title($custom_product_id, $entity_product_title);
  }
}

หลังจากดีบักโค้ดโดยใช้ xdebug ฉันเห็นโครงสร้างต่อไปนี้ของสิ่งที่มาในอาร์กิวเมนต์มาตรฐาน $entity ของเบ็ด:

$entity
  เขตข้อมูล
    field_product_cid
    field_second
    .....
    ชื่อ
      x-ค่าเริ่มต้น
        รายการ
          0
            ค่า
              ค่า = âชื่อของฉันâ
apaderno avatar
us flag
ยินดีต้อนรับสู่คำตอบของ Drupal! เมื่อ `hook_ENTITY_TYPE_update()` ถูกเรียกใช้ entiiy และฟิลด์จะถูกบันทึกไว้ในฐานข้อมูลแล้ว
leymannx avatar
ne flag
ใช้ `hook_ENTITY_TYPE_presave` เพื่อแทนที่ข้อมูลก่อนที่จะถูกจัดเก็บโดยไม่จำเป็นต้องยุ่งกับฐานข้อมูลหรือแคช ปล่อยให้ Drupal ทั้งหมดนั้น
apaderno avatar
us flag
`_custom_product_save_title()` ไม่มีพารามิเตอร์ `$form_state` หรือ `$fields` และ (เป็นฟังก์ชัน) ไม่มีสิทธิ์เข้าถึง `$this` ซึ่งหมายความว่า `$form_state->getValue('cid')` และ `$this->connection->update($this->getTableName())` จะทำให้เกิดข้อผิดพลาดหรือคำเตือน
apaderno avatar
us flag
เมื่อถามคำถาม โปรดแสดงรหัสที่คุณใช้จริงและตรวจสอบว่ารหัสเป็นรหัส PHP ที่ถูกต้อง
sonfd avatar
in flag
ฉันคิดว่าคำถามจริงของคุณคือ "[วิธี] เพื่อเพิ่มการตรวจสอบเพื่อดูว่าชื่อเรื่องถูกบันทึกหรือไม่และไม่ได้บันทึกฟิลด์อื่น [ใน hook_entity_update()]" แต่ฉันไม่แน่ใจว่าหมายความว่าอย่างไร การคาดเดาที่ดีที่สุดของฉันคือคุณต้องการทดสอบว่าเอนทิตีมีการเปลี่ยนชื่อหรือไม่ แต่ไม่มีการเปลี่ยนแปลงอื่น ๆ แต่นั่นไม่สมเหตุสมผลสำหรับฉันในบริบทของโพสต์โดยรวมของคุณ

โพสต์คำตอบ

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