web-dev-qa-db-fra.com

Comment faire une entité entityQuery avec un champ Date uniquement dans Drupal 8?

Dans Drupal 8, le champ Date uniquement stocke les données dans une colonne varchar dans une CCYY-MM-DD = format, par exemple 2016-04-18.

En tant que tel, vous ne pouvez plus simplement effectuer une requête entité supérieure à (> =), inférieure à (<=) ou similaire.

Existe-t-il une solution simple sur la façon de gérer cela? Plus précisément, j'essaie de faire deux requêtes, l'une où le champ de date a entre 14 et 21 jours, et l'autre où le champ de date a 21 jours et plus.

8
Decipher

Je fais beaucoup de conditions comme ça dans les requêtes d'entité, je n'ai pas encore rencontré de problème.

La principale chose à savoir est le fuseau horaire dans lequel les données sont stockées, c'est-à-dire UTC. Vous devez le convertir en fuseau horaire de stockage (il y a une constante pour cela), ou votre requête sera désactivée de quelques heures.

Voici un exemple basé sur quelque chose que je fais.Si vous ne stockez que des jours, il existe également une constante pour le formatage.

$date = new DrupalDateTime('21 days ago');
$date->setTimezone(new \DateTimezone(DATETIME_STORAGE_TIMEZONE));
$formatted = $date->format(DATETIME_DATETIME_STORAGE_FORMAT);

$nids = \Drupal::entityQuery('node')
  ->condition('your_date_field.value', $formatted, '<=')
  ->range(0, 50)
  ->execute();
16
Berdir