Am o gamă largă de nume și prenume, trebuie să știu care dintre acestea diferă de cele actuale din baza de date.
De exemplu:
$largeList = largeList();
$storage = $this->entityTypeManager->getStorage("mi_entity");
$interogare = $storage->getQuery();
foreach ($largeList ca $articol) {
$andGroup = $interogare->andConditionGroup();
$andGroup
->condition('nume', $item->getName(), "<>")
->condition('nume', $item->getSurname(), "<>");
$interogare->conditie($andGroup);
}
$ids = $query->execute();
Ideea este de a compara numele și prenumele, de exemplu partea din condiția sql ar trebui să arate ceva similar cu asta:
SELECTAȚI
"base_table"."id" AS "id",
"base_table"."id" AS "base_table_id"
DIN
„entity_table” „base_table”
INNER JOIN
„entity_table” „entity_table”
ON "entity_table"."id" = "base_table"."id"
UNDE
(("entity_table"."nume" NU CA LIKE 'NAME 1' ESCAPE '\') și ("entity_table"."nume" NU CA 'LAST NUME 1' ESCAPE '\')) ȘI
(("entity_table"."nume" NU CA LIKE 'NAME 2' ESCAPE '\') și ("entity_table"."nume" NU LIKE 'LAST NAME 2' ESCAPE '\')) ȘI ..... .
Cu toate acestea, codul de mai sus, ca exemplu, generează o îmbinare suplimentară pentru fiecare element din matrice, astfel:
SELECTAȚI
"base_table"."id" AS "id",
"base_table"."id" AS "base_table_id"
DIN
„entity_table” „base_table”
INNER JOIN
„entity_table” „entity_table”
ON "entity_table"."id" = "base_table"."id"
INNER JOIN
„entity_table” „entity_table_2”
ON "entity_table_2"."id" = "base_table"."id"
INNER JOIN
„entity_table” „entity_table_3”
ON "entity_table_3"."id" = "base_table"."id"
INNER JOIN
„entity_table” „entity_table_4”
ON "entity_table_4"."id" = "base_table"."id"
UNDE
(("entity_table"."nume" NU CA LIKE 'NAME 1' ESCAPE '\') și ("entity_table"."nume" NU CA 'LAST NUME 1' ESCAPE '\')) ȘI
(("entity_table_2"."nume" NU CA LIKE 'NAME 2' ESCAPE '\') și ("entity_table_2"."nume" NU LIKE 'LAST NAME 2' ESCAPE '\')) ȘI
(("entity_table_3"."nume" NU CA LIKE 'NAME 3' ESCAPE '\') și ("entity_table_3"."nume" NU LIKE 'LAST NAME 3' ESCAPE '\')) ȘI
(("entity_table_4"."nume" NU CA LIKE 'NAME 4' ESCAPE '\') și ("entity_table_4"."nume" NU LIKE 'LAST NAME 4' ESCAPE '\'))
În acest fragment din interogare, arăt doar 4 condiții care generează 4 join, dar dacă am 500, generează 500 join.
Care ar fi modul corect de a scrie condiția pentru a evita aceste îmbinări inutile?