TypeORM, je třeba přidat ", KDE V (...)" v dotazu podmínku, a pouze tehdy, když je hodnota za to

0

Otázka

Já používám TypeORM (verze 0.2.40) node.js projekt psaný na Stroji . Vím, že najít záznam z databáze můžu :

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

To spustí dotaz:

SELECT * FROM "user"
WHERE "firstName" = 'John' AND "company" = 'foo'

Teď mám pole ve stroji, které by mohly mít nebo nebude mít celočíselné hodnoty:

 const userIds = params.user_ids; // e.g. undefined or [1,2,3]

Rád bych, můj dotaz se přidat WHERE userIds IN (1,2,3) pokud userIds obsahuje takové hodnoty, jinak nemají přidat tato podmínka where.

Snažil jsem se (V tomto případě params může obsahovat company nebo nemusí obsahovat příliš):


const {params} = parseRequest();

query: SelectQueryBuilder<MyEntity> = ...;

query.where({
  firstName: 'John',
  ...(params.company && { company: params.company }), // add 'company' condition only if value exists
}).andWhere({/* how to do here have 'WHERE IN (1,2,3)' if value exist?*/});

Mám dvě otázky:

  1. Jak jen přidat", KDE V (...)" pouze tehdy, pokud params.user_ids existují (stejně jako pro params.company)? (Prosím, neváhejte odstranit my andWhere použití, pokud je elegantní způsob, jak)

  2. Co je syntaxe TypeORM přidat", KDE V (...)" logic pro params.user_ids za předpokladu, že hodnota existuje?

1

Nejlepší odpověď

0

Můžete použít jednoduchý podmíněný spolu s INprovozovatelem. E. g.

import {In} from "typeorm";

let query = ...
if (userIds?.length) {
  // WHERE IN [...userIds]
  query = query.where({userId: In([...userIds])})
}
// Continue chaining.
query = ...

Zdroje:

2021-11-22 15:16:35

query.getSql() ukazuje mi to nepřináší WHERE IN ale WHERE "MyEntity"."userId" = $1
user842225

@user842225 zkuste to teď. Přidána operátor a relevantních zdrojů.
Urmzd

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ý
..................................................................................................................