Supposons que nous ayons une requête d'entité comme celle-ci:
$query = \Drupal::service('entity_type.manager')->getStorage('taxonomy_term')->getQuery();
$tids = $query->condition('vid', 'tags')->execute();
et nous devons ajouter une expression et une condition SQL basées sur elle, comme suit:
Replace(name, ' ', '-') = 'some-tag'
Comment faire ça?
Le Drupal\Core\Entity\Query\Sql\Query
la classe n'a pas de méthode pour le faire (contrairement à Drupal\Core\Database\Query\Select
).
En utilisant la requête balises et métadonnées la requête sous-jacente Select
peut être modifiée facilement.
$query = \Drupal::service('entity_type.manager')->getStorage('taxonomy_term')->getQuery();
// Add tag and any metadata to the entity query.
$query->addTag('my_category')
->addMetaData('my_category', $dynamic_category_name);
$tids = $query->condition('vid', 'tags')->execute();
Et puis dans my_module.module
fichier:
/**
* Implements hook_query_TAG_alter() for my_category tag.
*/
function my_module_query_my_category_alter(\Drupal\Core\Database\Query\AlterableInterface $query) {
$expression = "Replace(taxonomy_term_field_data.name, ' ', '-')";
$args = [
':dynamic_category_name' => $query->getMetaData('my_category'),
];
$query->addExpression($expression);
$query->where($expression . ' = :dynamic_category_name', $args);
}