SELECT nid FROM node WHERE type = "blablabla"
などが必要です。
Drupal 8 PHPコードでこれをどのように行うのですか?
データベース抽象化レイヤー を使用します。
_$query = \Drupal::database()->select('node', 'n');
$query->addField('n', 'nid');
$query->condition('n.type', 'blablabla');
$results = $query->execute();
_
クエリの実行に関しては、 さまざまな方法で結果を取得する を使用することもできます。
例:
_$query = \Drupal::database()->select('node', 'n');
$query->addField('n', 'nid');
$query->condition('n.type', 'blablabla');
$results = $query->execute()->fetchAll();
$query = \Drupal::database()->select('node', 'n');
$query->addField('n', 'nid');
$query->condition('n.type', 'blablabla');
$results = $query->execute()->fetchAllAssoc('nid');
_
クラス内にいる場合は、静的なDrupalコンテナーを使用する代わりに、コンストラクターに適切なクラスを注入する必要があります。ただし、前処理関数にいるため、\Drupal::database()
は大丈夫。
_core/lib/Drupal.php
_から:
_ /**
* Returns the current primary database.
*
* @return \Drupal\Core\Database\Connection
* The current active database's master connection.
*/
public static function database() {
return static::getContainer()->get('database');
}
_
ユースケースに応じて、 EntityQuery を活用することもできます。
_$query = \Drupal::entityQuery('node');
$query->condition('type', 'blablabla');
$results = $query->execute();
_
node
の代わりに_node_field_data
_テーブルを使用することもできますが、クエリは非常に汎用的であるため、より優れたクエリがないとわかりにくいことに注意してください。
例:パブリッシュされたタイプのすべてのノードを取得します。
_$query = \Drupal::database()->select('node_field_data', 'nfd');
$query->addField('nfd', 'nid');
$query->condition('nfd.type', 'blablabla');
$query->condition('nfd.status', 1);
$results = $query->execute();
_
または:
_$query = \Drupal::entityQuery('node');
$query->condition('type', 'blablabla');
$query->condition('status', 1);
$results = $query->execute();
_