Рейтинг:0

Несколько ненужных объединений при создании andConditionGroup()

флаг de

У меня большой массив имен и фамилий, мне нужно знать какие из них отличаются от текущих в базе.

Например:

    $большой список = большой список ();
    $storage = $this->entityTypeManager->getStorage("mi_entity");
    $запрос = $хранилище->getQuery();

    foreach ($largeList как $item) {
      $andGroup = $query->andConditionGroup();
      $andGroup
        ->условие('имя', $item->getName(), "<>")
        ->условие('фамилия', $item->getSurname(), "<>");
      $запрос->условие($andGroup);
    }

    $ids = $запрос->выполнить();

Идея состоит в том, чтобы сравнить имя и фамилию, например, часть условия sql должна выглядеть примерно так:

ВЫБРАТЬ
   "base_table"."id" КАК "id",
   "base_table"."id" КАК "base_table_id" 
ОТ
   "entity_table" "базовая_таблица" 
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ
      "entity_table" "entity_table" 
      ON "entity_table"."id" = "base_table"."id"
КУДА
 (("entity_table"."name" NOT LIKE 'NAME 1' ESCAPE '\') and ("entity_table"."surname" NOT LIKE 'LAST NAME 1' ESCAPE '\')) И 
 (("entity_table"."name" NOT LIKE 'NAME 2' ESCAPE '\') and ("entity_table"."surname" NOT LIKE 'LAST NAME 2' ESCAPE '\')) И ..... .

Однако приведенный выше код в качестве примера создает дополнительное объединение для каждого элемента массива, например:

ВЫБРАТЬ
   "base_table"."id" КАК "id",
   "base_table"."id" КАК "base_table_id" 
ОТ
   "entity_table" "базовая_таблица" 
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ
      "entity_table" "entity_table" 
      ON "entity_table"."id" = "base_table"."id" 
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ
      "entity_table" "entity_table_2" 
      ON "entity_table_2"."id" = "base_table"."id" 
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ
      "entity_table" "entity_table_3" 
      ON "entity_table_3"."id" = "base_table"."id" 
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ
      "entity_table" "entity_table_4" 
      ON "entity_table_4"."id" = "base_table"."id" 

      КУДА
   (("entity_table"."name" NOT LIKE 'NAME 1' ESCAPE '\') and ("entity_table"."surname" NOT LIKE 'LAST NAME 1' ESCAPE '\')) И 
   (("entity_table_2"."имя" НЕ НРАВИТСЯ 'NAME 2' ESCAPE '\') и ("entity_table_2"."surname" НЕ НРАВИТСЯ 'LAST NAME 2' ESCAPE '\')) И 
   (("entity_table_3"."имя" НЕ НРАВИТСЯ 'NAME 3' ESCAPE '\') и ("entity_table_3"."surname" НЕ НРАВИТСЯ 'LAST NAME 3' ESCAPE '\')) И 
   (("entity_table_4"."name" NOT LIKE 'NAME 4' ESCAPE '\') и ("entity_table_4"."surname" NOT LIKE 'LAST NAME 4' ESCAPE '\'))

В этом отрывке из запроса я показываю только 4 условия, которые генерируют 4 соединения, но если у меня есть 500, оно генерирует 500 соединений. Как правильно написать условие, чтобы избежать этих ненужных объединений?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.