Реализация условия IS NULL в TypeORM: подробное руководство

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы отобрать записи со значением NULL, используйте функцию IsNull в TypeORM:

typescript
Скопировать код
import { IsNull } from 'typeorm';

const result = await repository.find({ where: { columnName: IsNull() } });

Данный код выберет строки, в которых столбец columnName не содержит данных. Не забудьте заменить columnName на конкретное имя столбца вашей таблицы.

Кинга Идем в IT: пошаговый план для смены профессии

Профессиональная обработка условия NOT NULL

Если вам требуется исключить строки, где столбец имеет значение NULL, примените сочетание Not и IsNull:

typescript
Скопировать код
import { Not, IsNull } from 'typeorm';

// Мы ищем столбцы, значения которых гарантированно не NULL.
const nonNullResults = await repository.find({ where: { columnName: Not(IsNull()) } });

Теперь у вас есть записи, где столбец columnName заполнен данными!

Гибкость QueryBuilder

QueryBuilder подходит для формирования более сложных запросов. Контроль на NULL с использованием его функций очень прост:

typescript
Скопировать код
const queryBuilderResult = await repository
  .createQueryBuilder("user")
  .where("user.columnName IS NULL")  // Обозначаем именно записи со значением NULL!
  .getMany();

Для получения противоположного результата добавьте NOT:

typescript
Скопировать код
const queryBuilderNonNullResult = await repository
  .createQueryBuilder("user")
  .where("user.columnName IS NOT NULL")  // Сегодня мы исключаем NULL!
  .getMany();

Рекомендуем задействовать QueryBuilder для решения сложных задач, но не злоупотреблять его возможностями без особой надобности!

Визуализация

Приведём на примере шахматной доски:

Markdown
Скопировать код
Шахматная доска 🏁: [Ферзь, Ладья, ПУСТО, Король]

Поиск поля с критерием IS NULL выглядит так:

Markdown
Скопировать код
🏁🧩❓: ПУСТО
# На нашей доске "клетка" с NULL соответствует пустой клетке на шахматах

Сравним в табличке условия IS NULL и IS NOT NULL:

Markdown
Скопировать код
| Условие    | Результат           |
| ---------- | -------------------- |
| IS NOT NULL| Ферзь, Ладья, Король |
| IS NULL    | ПУСТО                |

Фильтруя по IS NULL или IS NOT NULL, мы определяем, занята ли клетка на шахматной доске, или она свободна.

Более глубокое погружение в условия IS NULL

Поработаем с этим. Сравнение с null в SQL может вызвать замешательство, поскольку null не поддаётся стандартной логике сравнения:

SQL
Скопировать код
SELECT * FROM users WHERE name = NULL;  // Внимание: это не даст ожидаемого результата!

Не стоит беспокоиться, функция IsNull() заметно упрощает всё. Она задаёт условие IS NULL соблюдая типизацию в TypeORM и выступая в качестве FindOperatorType:

typescript
Скопировать код
import { FindOperatorType } from 'typeorm';

// Вуаля, всё решено: "isNull" является частью FindOperatorType. Но это наше с вами секретное знание!

Благодаря этому подходу вы избежите ошибок, вызванных неверным синтаксисом SQL.

Да, бывает и такое – пустота!

Обработка null в программировании – что-то вроде попытки услышать ультразвуковой свисток. Это особенно ощущается в логических операциях.

IsNull и Not(IsNull()) в TypeORM позволяют вам аккуратно управлять нулевыми значениями в структурах данных и запросах для стабильной работы приложения и сохранения порядка в ваших данных — это выгодно для обеих сторон!

Полезные материалы

  1. TypeORM – Превосходный ORM для TypeScript и JavaScript – Нужны параметры поиска в TypeORM? Великолепное руководство для ознакомления!
  2. TypeORM – Превосходный ORM для TypeScript и JavaScript – Погрузитесь в API репозитория TypeORM и научитесь создавать запросы.
  3. TypeORM – Превосходный ORM для TypeScript и JavaScript – Подробно о работе QueryBuilder с условиями в TypeORM, включая IS NULL.
  4. Issues · typeorm/typeorm · GitHub – Присоединитесь к живым дискуссиям о возможностях IS NULL и многом другом в репозитории TypeORM на GitHub.
  5. Newest 'typeorm' Questions – Stack Overflow – Самые свежие вопросы и ответы о работе с TypeORM и формировании сложных запросов.
  6. Medium Article on TypeORM Find Options and Common Patterns – Полное руководство по параметрам поиска в TypeORM, включающее общие шаблоны.