Je dois créer une requête SQL qui trouve tous les nœuds d'un certain type créés il y a X jours, afin que je puisse obtenir leurs ID. En raison du nombre important de nœuds dans la base de données, je préférerais utiliser une requête SQL directe, plutôt que entityQuery. On m'a averti que entityQuery peut être lent si vous travaillez avec de gros volumes de données.
Quoi qu'il en soit, je dois trouver où l'horodatage créé par le nœud est stocké dans la base de données. Dans Drupal 7, il est stocké directement dans la table des nœuds, mais pas dans Drupal 8.
La date créée est stockée dans le node_field_data
table comme horodatage UNIX dans un cloumn appelé created
.
Voici le code que vous utiliseriez pour récupérer les nœuds qui ont été créés il y a X jours, à l'aide d'une requête de sélection directe.
$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);
Assurez-vous d'injecter le database
et le entity_type.manager
services (si possible) lors de l'implémentation du code vous-même.
Si vous allez dans votre base de données Drupal, vous devriez trouver une table appelée 'node_field_data'. Dans cette table, il y a une colonne intitulée 'created'. Ce sera votre horodatage Unix pour quand le nœud a été créé .