指定されたノードIDのノードが存在することを確認します


12

フォームからノー​​ドIDを受け取るモジュールを作成しました。フォーム検証では、そのノードIDを持つノードが存在することを確認する必要があります。

どうすれば確認できますか?

回答:



16

ノード全体をロードしたくない場合は、エンティティクエリを使用できます。

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

これは、すべてのノードフィールドではなくIDのみを要求するため、はるかに効率的です。


1
それはあまりにも多くのフックを呼び出さないので、それは決定的に高速であり、それでもデータベースのテーブル名をハードコーディングする必要はありません(これは直接データベースをクエリするときに起こります)。
kiamlaluno

3
これは、明らかにそれよりも速くないかもしれません、さまざまな要因に依存します。IDが存在しない場合、ロードするクエリはおそらく高速であり、エンティティクエリ(クエリビルダーの2つのレイヤーが含まれる)よりも効率的です。また、ノードが存在する場合、ノードはすでにstatic /にキャッシュされている可能性があります。永続キャッシュまたはそれらのすべての例では、負荷()..それが存在する場合に何とか使用されるようにする必要があるかもしれません、実際に多くの意味をなすかもしれません。
Berdir

1
状況次第だと思う。
Eyal

2
セットアップで問題が発生し始めていました。約8000ノードがあります。このコードは、非常に高速に戻ります。これは受け入れられる答えになるはずです。
ホルヘカルデロン2018

2
正直なところ、これが最良かつ最も効率的な答えです。
JF Kiwad
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.