Toci
Toci

Reputation: 1

Drupal 8: convert node id from string to integer

Retrieve a node based on condition:

$query = \Drupal::entityQuery('node')
->condition('type', 'my_content_type')
->condition('title', 'my node title');
$nid = $query->execute();

The result of $nid is the correct node ID but the format is a string, (es: "123")

When I want to load the node by its ID, I write:

$node_id = Node::load($nid);

Doing this, the result I get is NULL because the variable $nid is holding a string (not integer). If I write the code like this:

$node_id = Node::load(123);

I get the node loaded.

How can I convert the variable string ($nid) as an integer ? I tried:

$nid_int = (int) $nid;
$node_id = Node::load($nid_int);

also I tried:

$nid_int = intval($nid);
$node_id = Node::load($nid_int);

But I alwas get result NULL

Thanks for your help

Upvotes: 0

Views: 1094

Answers (2)

Nik Ral
Nik Ral

Reputation: 122

You can't use Node::load($nid); directly, because the $query->execute() return an array like ['vid' => "nid"].

$query = \Drupal::entityQuery('node')
->condition('type', 'my_content_type')
->condition('title', 'my node title');
$nids = $query->execute();
$nid = (int)array_shift($nids);

Upvotes: 1

Sumit Kumar
Sumit Kumar

Reputation: 156

Can try:-

$nid_string = $nid->__toString();
$node_id = Node::load((int) $nid_string);

Upvotes: 0

Related Questions