it-swarm.com.de

Wie füge ich der Entitätsabfrage einen SQL-Ausdruck hinzu? (D8)

Angenommen, wir haben eine Entitätsabfrage wie die folgende:

$query = \Drupal::service('entity_type.manager')->getStorage('taxonomy_term')->getQuery();
$tids = $query->condition('vid', 'tags')->execute();

und wir müssen einige SQL-Ausdrücke und Bedingungen hinzufügen, die darauf basieren, wie die folgenden:

Replace(name, ' ', '-') = 'some-tag'

Wie geht das?

Das Drupal\Core\Entity\Query\Sql\Query class hat keine Methoden dafür (im Gegensatz zu Drupal\Core\Database\Query\Select).

3
Mike Shiyan

Mit Abfrage Tags und Metadaten kann die zugrunde liegende Abfrage Select leicht geändert werden.

$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();

Und dann in my_module.module Datei:

/**
 * 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);
}
4
Mike Shiyan