TypeORM, přidat podmínku v "kde", pokud je hodnota prezentovány a není prázdný řetězec

0

Otázka

Já používám TypeOrm v mém node.js projekt. Vím, že najít záznam z databáze můžu :

userRepository.find({ where: { firstName: "John" } });

To spustí dotaz:

SELECT * FROM "user"
WHERE "firstName" = 'John'

Teď ale potřebuji přidat další podal check in", kde" stavu pouze tehdy, jestliže hodnota je prezentována. Například, chci, aby také zkontrolovat company v SQL "kde" stavu, ale pouze v případě, company hodnota je zobrazena.

Zkoušel jsem následující, zajímalo by mě, můžu udělat následující tím, že výchozí prázdný řetězec '' pokud company není přítomen, pak ji přenést na find funkce where?

const company = params.company ? params.company : '';

userRepository.find({ where: { firstName: "John", company: company } });

Ale to by ještě přidat "company"='' v poslední SQL dotaz, který není dobrý. Zajímalo by mě, je tam stávající funkce v TypeORM, který by mohl dynamicky rozhodovat pouze přidat další podmínku v where pokud hodnota je uvedena a není prázdný řetězec?

nestjs node.js node.js-typeorm typeorm
2021-11-22 12:17:24
3

Nejlepší odpověď

2

Můžete použít ničení. Jako:

userRepository.find({
   where: {
      firstName: "John",
      ...(params?.company && { company: params.company }),
   }
});

takže, pokud params.company je undefined (nebo prázdný řetězec), potom

...(undefined && { company: undefined })

vrátí undefined a za zničení to jako ...{} pro vás.

pokud params.company obsahují nějakou hodnotu,

...('company' && { company: 'company' })

vrátí ...{company: 'company'} a zničit to pro kde.

Příklad:

const companyTestWithValue = 'company';
const companyTestWithoutValue = '';

const whereWithValue = {
  firstName: 'John',
  ...(companyTestWithValue && { company: companyTestWithValue }),
};

const whereWithoutValue = {
  firstName: 'John',
  ...(companyTestWithoutValue && { company: companyTestWithoutValue }),
};

console.log('whereWithValue:', whereWithValue);
console.log('whereWithoutValue:', whereWithoutValue);

2021-11-22 13:28:24

To je chytré! Díky!!!
user842225
0

Nemyslím si, že tam bude pěkný řešení. Vaše nejlepší sázka bude pravděpodobně jen použít if - else. TypeOrm vytvoří prohlášení pomocí, co bylo předáno. Doporučuji jen:

      if(params.company){
        userRepository.find({ where: { firstName: "John", company: company } });
      } else{
        userRepository.find({ where: { firstName: "John" } });
      }
2021-11-22 13:21:33
0

Můžete vytvořit zjistit stav dynamicky, například:

const condition = { where: { firstName: "John" } };

if (params.company) {
    condition.where = {
        ...condition.where,
        company: params.company
    }
}

const user = userRepository.find(condition);
2021-11-22 13:06:10

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................