Я посмотрел на использование QueryBuilder, но мне трудно сопоставить запрос SQL с ним для следующего сценария.
Схема
партнер
продажа
- row_id
- партнер -> partner.id
- другие данные о продажах
sale_event - эта таблица отслеживает N событий рабочего процесса и данные о состоянии продажи.
- uuid
- sale_id - > sale.row_id
- event_workflow
- event_action
- created
Учитывая идентификатор партнера, мне нужно получить все заказы для указанного c рабочий процесс подтверждение продажи , которые находятся в состоянии ожидает или не имеют событий для рабочего процесса подтверждения продажи .
У меня есть после SQL, который должен получить то, что мне нужно, но сопоставить это с построителем запросов TypeORM было немного сложно. Большинство встреченных мною примеров, в которых используются подзапросы, немного проще и выглядят так, будто они также используют старую версию TypeORM.
select s.*,
p.*,
ev.*
from sale s
inner join partner p on s.partner = p.id
inner join (
# Get the most recent event in the 'sale-confirm' workflow
select e.*
from sale_event e
where e.sale_id = -1
and event_workflow = 'sale-confirm'
order by e.created
limit 1
) ev on ev.sale_id = s.row_id
where ev.event_action = 'pending';