Skip to content

aggregate entities #399

@marcosh

Description

@marcosh

currently arrayAgg from Database.Esqueleto.PostgreSQL allows to aggregate Values.

It would be nice if it was possible also to aggregate entities.

For example, consider a 1:n relation between tables foo and bar. IT would be nice to write

data Baz = Baz
  { bazFoo :: Entity Foo
  , bazBars :: [Entity Bar]
  }

$(deriveEsqueletoRecord ''Baz)

query :: FooId -> SqlPersistT m [Baz]
query fooId =
  select $ do
    foo :& bar <-
      from $
        table @Foo
          `leftJoin` table @Bar
            `on` (\(foo :& bar) -> just foo.id ==. bar.foo)
    where_ $ foo.id = val fooId
    groupBy foo.id
    pure $
      SqlBaz
        { bazFoo = foo
        , bazBars = arrayAgg bar
        }

or something analogous

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions