Реализация условия IS NULL в TypeORM: подробное руководство
Быстрый ответ
Чтобы отобрать записи со значением NULL
, используйте функцию IsNull
в TypeORM:
import { IsNull } from 'typeorm';
const result = await repository.find({ where: { columnName: IsNull() } });
Данный код выберет строки, в которых столбец columnName
не содержит данных. Не забудьте заменить columnName
на конкретное имя столбца вашей таблицы.
[AsideBanner]
Профессиональная обработка условия NOT NULL
Если вам требуется исключить строки, где столбец имеет значение NULL
, примените сочетание Not
и IsNull
:
import { Not, IsNull } from 'typeorm';
// Мы ищем столбцы, значения которых гарантированно не NULL.
const nonNullResults = await repository.find({ where: { columnName: Not(IsNull()) } });
Теперь у вас есть записи, где столбец columnName
заполнен данными!
Гибкость QueryBuilder
QueryBuilder
подходит для формирования более сложных запросов. Контроль на NULL
с использованием его функций очень прост:
const queryBuilderResult = await repository
.createQueryBuilder("user")
.where("user.columnName IS NULL") // Обозначаем именно записи со значением NULL!
.getMany();
Для получения противоположного результата добавьте NOT
:
const queryBuilderNonNullResult = await repository
.createQueryBuilder("user")
.where("user.columnName IS NOT NULL") // Сегодня мы исключаем NULL!
.getMany();
Рекомендуем задействовать QueryBuilder
для решения сложных задач, но не злоупотреблять его возможностями без особой надобности!
Визуализация
Приведём на примере шахматной доски:
Шахматная доска 🏁: [Ферзь, Ладья, ПУСТО, Король]
Поиск поля с критерием IS NULL
выглядит так:
🏁🧩❓: ПУСТО
# На нашей доске "клетка" с NULL соответствует пустой клетке на шахматах
Сравним в табличке условия IS NULL
и IS NOT NULL
:
| Условие | Результат |
| ---------- | -------------------- |
| IS NOT NULL| Ферзь, Ладья, Король |
| IS NULL | ПУСТО |
Фильтруя по IS NULL
или IS NOT NULL
, мы определяем, занята ли клетка на шахматной доске, или она свободна.
Более глубокое погружение в условия IS NULL
Поработаем с этим. Сравнение с null
в SQL может вызвать замешательство, поскольку null
не поддаётся стандартной логике сравнения:
SELECT * FROM users WHERE name = NULL; // Внимание: это не даст ожидаемого результата!
Не стоит беспокоиться, функция IsNull()
заметно упрощает всё. Она задаёт условие IS NULL
соблюдая типизацию в TypeORM и выступая в качестве FindOperatorType:
import { FindOperatorType } from 'typeorm';
// Вуаля, всё решено: "isNull" является частью FindOperatorType. Но это наше с вами секретное знание!
Благодаря этому подходу вы избежите ошибок, вызванных неверным синтаксисом SQL.
Да, бывает и такое – пустота!
Обработка null
в программировании – что-то вроде попытки услышать ультразвуковой свисток. Это особенно ощущается в логических операциях.
IsNull
и Not(IsNull())
в TypeORM позволяют вам аккуратно управлять нулевыми значениями в структурах данных и запросах для стабильной работы приложения и сохранения порядка в ваших данных — это выгодно для обеих сторон!
Полезные материалы
- TypeORM – Превосходный ORM для TypeScript и JavaScript – Нужны параметры поиска в TypeORM? Великолепное руководство для ознакомления!
- TypeORM – Превосходный ORM для TypeScript и JavaScript – Погрузитесь в API репозитория TypeORM и научитесь создавать запросы.
- TypeORM – Превосходный ORM для TypeScript и JavaScript – Подробно о работе
QueryBuilder
с условиями в TypeORM, включаяIS NULL
. - Issues · typeorm/typeorm · GitHub – Присоединитесь к живым дискуссиям о возможностях
IS NULL
и многом другом в репозитории TypeORM на GitHub. - Newest 'typeorm' Questions – Stack Overflow – Самые свежие вопросы и ответы о работе с TypeORM и формировании сложных запросов.
- Medium Article on TypeORM Find Options and Common Patterns – Полное руководство по параметрам поиска в TypeORM, включающее общие шаблоны.