web-dev-qa-db-ja.com

ノードが作成したタイムスタンプはデータベースのどこに保存されますか?

X日前に作成された特定のタイプのすべてのノードを検索するSQLクエリを作成する必要があるので、それらのIDを取得できます。データベースには膨大な数のノードがあるため、entityQueryではなく直接SQLクエリを使用したいと思います。大量のデータを処理する場合、entityQueryが遅くなる可能性があると警告されました。

とにかく、ノードが作成したタイムスタンプがデータベースに保存されている場所を見つける必要があります。 Drupal 7では、ノードテーブルに直接格納されますが、Drupal 8.ではありません。

1
Casso

作成された日付は、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サービス(可能な場合)を必ず挿入してください。

7
user72672

Drupalデータベースにアクセスすると、「node_field_data」というテーブルが見つかります。このテーブルには、「created」というラベルの付いた列があります。これは、ノードが作成されたときのUnixタイムスタンプです。

3
mrlexington