ฉันมีประเภทฟิลด์ที่กำหนดเอง org_personด้วยการตั้งค่าการเติมข้อความอัตโนมัติเพื่อค้นหาจุดสิ้นสุดของ "ผู้คน" มันบันทึกบางอย่างเช่น จอห์น สมิธ (12345) ถึงคุณสมบัติค่า (คุณสมบัติ $['มูลค่า']).
จุดสิ้นสุดมีลักษณะดังนี้:
[{id, name, title, ...}, {id, name, title, ...},...]
เป้าหมายของฉันคือ ในการบันทึกเอนทิตี (และ cron) ค้นหาจุดสิ้นสุดของฉันและบันทึกคุณสมบัติมากกว่า 30 รายการลงในฐานข้อมูล
ฉันต้องสามารถกรองและจัดเรียงค่าเหล่านี้ในมุมมองได้ ซึ่งเป็นเหตุผลว่าทำไมการคำนวณข้อมูลนี้แบบเรียลไทม์จึงไม่อยู่ในตาราง
ตามที่ฉันเข้าใจ ฉันต้องตั้งค่าคลาสของคุณสมบัติที่จะใช้สำหรับสร้างมูลค่าคุณสมบัติ สิ่งที่ต้องการ:
$properties['name'] = DataDefinition::create('ใดๆ')
->setLabel(ใหม่ TranslatableMarkup('ชื่อ'))
->ตั้งค่าการคำนวณ (จริง)
->ตั้งค่าอ่านอย่างเดียว(จริง)
->setClass('\Drupal\my_module\TypedDataName');
จากนั้นในของฉัน TypedDataName Class ฉันได้รับค่าเช่น:
ฟังก์ชั่นสาธารณะ getValue () {
ถ้า ($this->ประมวลผล !== NULL) {
กลับ $this->ประมวลผล;
}
$values = $this->getParent()->getValue();
$submitted_value = $values['ค่า'];
$id = EntityAutocomplete::extractEntityIdFromAutocompleteInput($submitted_value);
// เรียกใช้การดึงข้อมูลที่นี่เพื่อรับคุณสมบัติ 'ชื่อ'
$response = $this->_fetchName($id);
$value = $response[0]["ชื่อ"];
$this->ประมวลผล = $value;
กลับ $this->ประมวลผล;
}
ใช้งานได้แม้ว่าจะดูเหมือนว่ากำลังทำงานบนจอแสดงผลแทนที่จะดึงจากฐานข้อมูล
นอกจากนี้ หากฉันเพิ่มพร็อพเพอร์ตี้อื่น เช่น ชื่อ (หรือส่วนที่เหลือ) มันจะเรียกใช้การดึงข้อมูลนี้ ทั้งหมด คุณสมบัติ.
สิ่งนี้สามารถทำได้ด้วยการดึงข้อมูลเพียงครั้งเดียวเพื่อเติมคุณสมบัติ 30+ ในการบันทึก