ฉันต้องการโหลดโหนดบางอย่าง ฉันไม่รู้รหัสของโหนด แต่ฉันรู้ว่ามันมีฟิลด์แฮชที่ไม่เหมือนใครและฉันรู้แฮชนั้น
ฉันต้องการโหลดโหนดผ่านเขตข้อมูลแฮช ฉันจะทำสิ่งนั้นได้อย่างไร
ฉันต้องการโหลดโหนดบางอย่าง ฉันไม่รู้รหัสของโหนด แต่ฉันรู้ว่ามันมีฟิลด์แฮชที่ไม่เหมือนใครและฉันรู้แฮชนั้น
ฉันต้องการโหลดโหนดผ่านเขตข้อมูลแฮช ฉันจะทำสิ่งนั้นได้อย่างไร
คำตอบ:
คุณสามารถทำได้โดยใช้ EntityFieldQuery
สำหรับ D8 EntityFieldQueryได้ถูกเขียนใหม่
Drupal 8:
$query = \Drupal::entityQuery('entity_test');
$default_langcode_group = $query->andConditionGroup()
->condition('user_id', $properties[$default_langcode]['user_id'], '=', $default_langcode)
->condition('name', $properties[$default_langcode]['name'], '=', $default_langcode);
$langcode_group = $query->andConditionGroup()
->condition('name', $properties[$langcode]['name'], '=', $langcode)
->condition("$this->field_name.value", $field_value, '=', $langcode);
$result = $query
->condition('langcode', $default_langcode)
->condition($default_langcode_group)
->condition($langcode_group)
->sort('name', 'ASC', $default_langcode)
->execute();
ฉันจะดึงค่าของฟิลด์ของเอนทิตีได้อย่างไร
$query = \Drupal::entityQuery('node')
->condition('status', 1)
->condition('changed', REQUEST_TIME, '<')
->condition('title', 'cat', 'CONTAINS')
->condition('field_tags.entity.name', 'cats');
$nids = $query->execute();
loadByProperties()
วิธีที่เร็วที่สุดในการโหลดโหนดที่เฉพาะเจาะจงโดยค่าฟิลด์คือการใช้วิธีการ
คุณระบุค่าฟิลด์ตั้งแต่หนึ่งค่าขึ้นไปและส่งคืนเป็นอาร์เรย์ที่มีโหนดที่ตรงกับค่าของฟิลด์:
$nodes = \Drupal::entityTypeManager()
->getStorage('node')
->loadByProperties(['title' => $title]);
โดยปกติคุณวนซ้ำโหนด ในกรณีของคุณคุณกำลังมองหาหนึ่งโหนดที่เฉพาะเจาะจง โหนดเดียวยังถูกส่งคืนในอาร์เรย์ดังนั้นให้ใช้reset()
และสิ่งนี้จะส่งกลับทั้งโหนดหรือ NULL หากไม่พบสิ่งใดเลย:
if ($node = reset($nodes)) {
// found $node that matches the title
}
$node = reset...
) เนื่องจากแฮชนั้นไม่เหมือนใคร
Node::
ในการโหลดโหนดดังกล่าวถูกต้อง?