3

I used this

    $this->termStorage->loadByProperties(['name' => 'test']);

I got two terms: Test, test. I want to get only one: test

This is working without case-sensitive:

    $this->termStorage->getQuery()->condition('name', 'test', '=')->execute();
    \Drupal::database()->select('taxonomy_term_field_data', 't')
      ->condition('t.name', 'test')
      ->fields('t', ['name'])
      ->execute()
      ->fetchAll();
    \Drupal::database()->query("SELECT name FROM taxonomy_term_field_data WHERE name='test'")->fetchAll();
2
  • 1
    See this D7 topic, besides EntityFieldQuery being replace by EntityQuery this should still be valid for D8: drupal.stackexchange.com/questions/77780/…
    – 4uk4
    Oct 30, 2019 at 13:00
  • 1
    Alternatively just use PHP to compare the string with the loaded terms' names.
    – Beebee
    Oct 30, 2019 at 13:18

1 Answer 1

6

To retrieve result with sensitive case, you can use binary in where clause:
Like this sql query.

SELECT name FROM taxonomy_term_field_data WHERE binary name='test'

For Drupal you can use \Drupal::database()->select with where conditions take a look here .

Try this:

 $result = \Drupal::database()->select('taxonomy_term_field_data', 't')
    ->where(
      'binary name = :term_name',
      ['term_name' => 'test']
    )
    ->fields('t', ['name'])
    ->execute()
    ->fetchAll();