Score:0

ฉันจะลบค่าฟิลด์โดยทางโปรแกรมได้อย่างไร

ธง gb

การใช้ Entity API ฉันรู้วิธีรับค่าหรือตั้งค่า:

$nid = $entity->id();
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
...
$nom = strtoupper($node->get('field_nom')->value);
$node->set('field_nom', $nom);
$node->save();

แต่มีความเป็นไปได้ไหมที่จะลบค่าของฟิลด์นี้?

ฉันพยายามลบค่าในฐานข้อมูลโดยตรง

$query =\Drupal::database()->delete('node__field_nom');
$query->condition('field_nom', $nom);
$query->execute();

แต่เนื่องจากค่าถูกแคชไว้ โหนดจึงต้องโหลดซ้ำ 2 ครั้งจึงจะเห็นผลลัพธ์บนหน้าจอ (ฟิลด์ว่าง)

Score:2
ธง cn

เนื้อหาฟิลด์คือรายการฟิลด์ และโดยปกติคุณจะต้องรวมค่าเดียวในอาร์เรย์ด้วย ข้อเท็จจริงที่ว่าคุณสามารถตั้งค่าสเกลาร์ได้เหมือนในตัวอย่างของคุณ เนื่องจากโค้ดพิเศษใน Field API ตรวจพบสเกลาร์และถ่ายโอนไปยังรายการฟิลด์ที่มีค่าเดียว หากต้องการลบฟิลด์ คุณไม่สามารถตั้งค่าสเกลาร์ว่างได้ เนื่องจากสิ่งนี้จะถูกตีความว่าเป็นรายการฟิลด์เดียวที่มีค่าว่างนั้น

ดังนั้นหากต้องการลบเนื้อหาฟิลด์ทั้งหมดให้ตั้งค่าอาร์เรย์ว่าง:

$node->set('field_nom', []);

BTW คุณจะได้รับเนื้อหาภาคสนามทั้งหมด:

$values ​​= $node->get('field_nom')->getValue();

เปลี่ยนค่า $values ​​ของอาร์เรย์และตั้งค่าอีกครั้ง:

$node->set('field_nom', $values);
cocq avatar
gb flag
มันใช้งานได้ :-) ขอบคุณ!

โพสต์คำตอบ

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