ฉันกำลังพยายามเขียนคำสั่ง drush เพื่อบันทึกโหนดทั้งหมดบนไซต์ของฉันอีกครั้ง
ฉันค้นหาโมดูลและพบ บันทึกโหนดทั้งหมดอีกครั้ง โมดูล แต่คำสั่ง drush ยังไม่พร้อม เลยตัดสินใจลองเขียนดูเอง
อย่างไรก็ตาม ฉันไม่สามารถรับโหนดเพื่อบันทึกซ้ำได้ $entity->บันทึก()
และฉันไม่เข้าใจว่าทำไม
<?php
เนมสเปซ Drupal\resave_all_nodes\Commands;
ใช้ Drupal\Core\Entity\EntityTypeManagerInterface;
ใช้ Drupal\node\Entity\Node;
ใช้ Drush\Commands\DrushCommands;
/**
* คลาสคำสั่ง Drush สำหรับการแปลงโมดูล Resave All Nodes
*/
คลาส ResaveAllNodesCommands ขยาย DrushCommands
{
/**
* ผู้จัดการประเภทเอนทิตี
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
ส่วนตัว $entityTypeManager;
/**
* สร้างวัตถุ ResaveAllNodesCommands
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* ผู้จัดการประเภทเอนทิตี
*/
ฟังก์ชั่นสาธารณะ __construct (EntityTypeManagerInterface $entity_type_manager)
{
$this->entityTypeManager = $entity_type_manager;
ผู้ปกครอง :: __ สร้าง ();
}
/**
* บันทึกโหนดทั้งหมดอีกครั้ง
*
* @คำสั่ง resave-all-nodes:resave
*
* @usage drush resave-all-nodes:resave
* บันทึกโหนดทั้งหมดบนไซต์อีกครั้ง
*
* @นามแฝงวิ่ง
*/
ฟังก์ชั่นสาธารณะ resaveAllNodes()
{
$my_node = โหนด::โหลด(1);
$my_node->save();
\Drupal::logger('resave_all_nodes')->notice("บันทึกโหนด 1 แล้ว!");
}
}
เมื่อฉันรันคำสั่ง บันทึกจะแสดงการแจ้งเตือนคนตัดไม้:
- ฉันเห็น "โหนด 1 ถูกบันทึก!" ในบันทึก
- ฉันมีข้อความเข้าสู่ระบบอื่นใน
hook_entity_presave()
ที่ยังปรากฏอยู่
แต่เมื่อฉันไปที่ /ผู้ดูแลระบบ/เนื้อหา
"วันที่อัปเดต" สำหรับโหนด 1 ไม่มีการเปลี่ยนแปลง นอกจากนี้ เนื้อหาของโหนดจะไม่ถูกบันทึกใหม่
ถ้าฉันไป โหนด/1/แก้ไข
และบันทึกซ้ำด้วยตนเอง โหนดจะถูกบันทึกซ้ำตามที่ฉันคาดไว้ (วันที่อัปเดตได้รับการอัปเดต และค่าฟิลด์ได้รับการอัปเดต)
ดังนั้นทำไม โหนด -> บันทึก ()
ล้มเหลวอย่างเงียบ ๆ (วันที่อัปเดตและค่าฟิลด์ยังคงเหมือนเดิม) เมื่อการบันทึกด้วยตนเองทำงานได้หรือไม่
ฉันมีโมดูลที่กำหนดเองสองสามโมดูล และฉันได้ปิดการใช้งานและสร้างแคชใหม่ แต่ปัญหายังคงอยู่