it-swarm.com.de

Wie lade ich einen Knoten anhand eines Feldwerts?

Ich möchte einen bestimmten Knoten laden. Ich kenne die ID des Knotens nicht, aber ich weiß, dass er ein bestimmtes Hash-Feld hat, das eindeutig ist, und ich kenne diesen Hash.

Ich möchte den Knoten über das Hash-Feld laden. Wie kann ich das machen?

21
Andrew

Sie können dies mit EntityFieldQuery erreichen.

Für D8 EntityFieldQuery wurde neu geschrieben.

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();

Wie rufe ich die Werte eines Entitätsfeldes ab?

$query = \Drupal::entityQuery('node')
    ->condition('status', 1)
    ->condition('changed', REQUEST_TIME, '<')
    ->condition('title', 'cat', 'CONTAINS')
    ->condition('field_tags.entity.name', 'cats');

$nids = $query->execute();
15
DRUPWAY

Der schnellste Weg, einen bestimmten Knoten nach Feldwert zu laden, ist die Methode loadByProperties().

Sie geben einen oder mehrere Feldwerte an und geben ein Array zurück, das die Knoten enthält, die mit den Feldwerten übereinstimmen:

$nodes = \Drupal::entityTypeManager()
  ->getStorage('node')
  ->loadByProperties(['title' => $title]);

Normalerweise durchlaufen Sie die Knoten. In Ihrem Fall suchen Sie nach einem bestimmten Knoten. Ein einzelner Knoten wird auch im Array zurückgegeben. Wenden Sie also reset() an, und dies gibt entweder den Knoten oder NULL zurück, wenn nichts gefunden wurde:

if ($node = reset($nodes)) {
  // found $node that matches the title
}
34
4k4