Реализация условия IS NULL в TypeORM: подробное руководство
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы отобрать записи со значением NULL
, используйте функцию IsNull
в TypeORM:
import { IsNull } from 'typeorm';
const result = await repository.find({ where: { columnName: IsNull() } });
Данный код выберет строки, в которых столбец columnName
не содержит данных. Не забудьте заменить columnName
на конкретное имя столбца вашей таблицы.
Профессиональная обработка условия 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, включающее общие шаблоны.