Vapor 3/Fluent для Postgres: как сделать запрос SELECT DISTINCT?

Я хотел бы запросить модель, чтобы Fluent генерировал SQL, который выглядит следующим образом:

SELECT DISTINCT ON(<my columns>) * FROM my_table...

Как я могу это сделать?


person Elliot Schrock    schedule 28.10.2018    source источник
comment
Если вы ищете внутри своего проекта, есть «отличный» протокол, но я не понимаю, как его использовать. Вы можете попробовать необработанный запрос, пока документы не наверстают упущенное.   -  person Nick    schedule 28.10.2018
comment
@Ник, да, видел этот протокол, не мог понять, как его использовать :/ Raw, я думаю, требует, чтобы я написал кучу грубого кода, поэтому стараюсь избегать этого ... но спросил некоторых людей из Vapor на Твиттер, так что, может быть, у них будут какие-то идеи?   -  person Elliot Schrock    schedule 28.10.2018


Ответы (1)


Вздох.

Итак, в итоге пришлось использовать необработанный запрос. Вы можете сделать то же самое с:

let distinctModels = req.withPooledConnection(to: .psql) { (conn) -> Future<[MyModel]> in
    conn.raw("SELECT DISTINCT ON(<my columns>) * FROM <my_table> INNER JOIN <another_table> ON <some_condition> WHERE <conditions>")
        .all(decoding: MyModel.self)
}

Где req имеет тип Request. Функция withPooledConnection вернет будущее ваших моделей — просто убедитесь, что вы их расшифровали!

person Elliot Schrock    schedule 14.12.2018