X日前に作成された特定のタイプのすべてのノードを検索するSQLクエリを作成する必要があるので、それらのIDを取得できます。データベースには膨大な数のノードがあるため、entityQueryではなく直接SQLクエリを使用したいと思います。大量のデータを処理する場合、entityQueryが遅くなる可能性があると警告されました。
とにかく、ノードが作成したタイムスタンプがデータベースに保存されている場所を見つける必要があります。 Drupal 7では、ノードテーブルに直接格納されますが、Drupal 8.ではありません。
作成された日付は、created
という名前のクロームにUNIXタイムスタンプとしてnode_field_data
テーブルに格納されます。
ダイレクトセレクトクエリを使用して、X日前に作成されたノードをフェッチするために使用するコードを次に示します。
$day = 86400; // One day in seconds.
$days = 3; // The amount of days ago to fetch from.
$nids = \Drupal::database()->select('node_field_data', 'n')
->addField('n', 'nid')
->condition('n.created', \Drupal::time()->getCurrentTime() - $days * $day, '>')
->execute()
->fetchField();
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple($nids);
自分でコードを実装する場合は、database
およびentity_type.manager
サービス(可能な場合)を必ず挿入してください。
Drupalデータベースにアクセスすると、「node_field_data」というテーブルが見つかります。このテーブルには、「created」というラベルの付いた列があります。これは、ノードが作成されたときのUnixタイムスタンプです。