Überprüfen Sie, ob ein Knoten mit einer bestimmten Knoten-ID vorhanden ist

12

Ich habe ein Modul erstellt, das die Knoten-ID aus dem Formular erhält. Bei der Formularüberprüfung muss überprüft werden, ob ein Knoten mit dieser Knoten-ID vorhanden ist.

Wie kann ich das überprüfen?

Thew
quelle

Antworten:

16

Wenn Sie nicht den gesamten Knoten laden möchten, können Sie die Entitätsabfrage verwenden:

$values = \Drupal::entityQuery('node')->condition('nid', $id)->execute();
$node_exists = !empty($values);

Dies ist viel effizienter, da nur die IDs und nicht alle Knotenfelder abgefragt werden.

Eyal
quelle
1
Es werden nicht einmal zu viele Hooks aufgerufen, daher ist es definitiv schneller und es ist immer noch nicht erforderlich, den Namen der Datenbanktabelle fest zu codieren (was passieren würde, wenn die Datenbank direkt abgefragt wird).
Kiamlaluno
3
Dies könnte nicht einmal so offensichtlich schneller sein, hängt von verschiedenen Faktoren ab. Wenn die ID nicht vorhanden ist, ist die Abfrage, die geladen wird, wahrscheinlich schneller und effizienter als eine Entitätsabfrage (an der zwei Ebenen von Abfrageerstellern beteiligt sind. Wenn der Knoten vorhanden ist, wird er möglicherweise bereits in static / zwischengespeichert persistenter Cache oder muss möglicherweise irgendwie verwendet werden, wenn er vorhanden ist. In all diesen Fällen ist load () möglicherweise sinnvoller.
Berdir
1
Ich bin damit einverstanden, dass es von der Situation abhängt.
Eyal
2
Ich fing an, Probleme mit meinem Setup zu bekommen. Ich habe ungefähr 8000 Knoten. Dieser Code gibt super duper schnell zurück. Dies sollte die akzeptierte Antwort sein.
Jorge Calderon
2
Ehrlich gesagt ist dies die beste und effizienteste Antwort.
JF Kiwad