Score:0

เพิ่มประสิทธิภาพการดึงข้อมูลจากวัตถุเอนทิตี

ธง cn

ขณะนี้เรากำลังใช้ EntityTypeManager เพื่อโหลดหรือ loadMultiple :

$this->entityTypeManager->getStorage('node')->loadMultiple($nids);
$this->entityTypeManager->getStorage('node')->load($nid);

สิ่งนี้สร้างและส่งคืนวัตถุของโหนดซึ่งฉันคิดว่าใช้ทรัพยากรมากบนเซิร์ฟเวอร์ (เนื่องจากดึงข้อมูลทุกฟิลด์) เรากำลังพยายามดึงข้อมูลประมาณ 500 โหนด และแต่ละโหนดมีมากกว่า 80 ฟิลด์ เราต้องการดึงข้อมูลบางฟิลด์เท่านั้น

มีใครทราบวิธีการสืบค้นและดึงข้อมูลเฉพาะบางฟิลด์ที่จำเป็นหรือไม่

misterdidi avatar
de flag
ฉันจะพึ่งพาฐานข้อมูล API เพื่อสร้างคิวรีที่กำหนดเองซึ่งจะดึงเฉพาะฟิลด์ที่คุณต้องการเท่านั้น ดูคำตอบของ Philipp Zedler ในโพสต์ที่กล่าวถึงโดย @leymannx
Score:2
ธง pt

คุณอาจใช้แบบสอบถามที่กำหนดเองเพื่อให้มีประสิทธิภาพมากขึ้น นี่คือตัวอย่าง:

$connection = \Drupal::service('ฐานข้อมูล');
$select = $connection->select('node_field_data', 'n');
$select->fields('n', ['nid', 'type', 'title']);
$select->condition('n.status', 1, '=');
$select->condition('n.type', ['page', 'article'], 'IN');
$select->leftJoin('node__body', 'body', 'body.entity_id = n.nid');
$select->fields('body', ['body_value', 'body_summary']);
$result = $select->execute()->fetchAll(); 
// พิมพ์ $result[0]->body_value; 

คุณต้องเข้าร่วมตารางสำหรับแต่ละฟิลด์ที่คุณต้องการได้รับ โปรดทราบว่า ผลลัพธ์ $ ไม่มีไฮเดรต โหนด วัตถุ แต่ stdClass; สิ่งนี้สามารถทำงานกับเอนทิตีฐานข้อมูลทุกประเภท (เช่น ผู้ใช้ หรืออะไรก็ตาม)

โพสต์คำตอบ

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