Haskell Esqueleto 项目到记录列表而不是元组
Haskell Esqueleto project to list of records instead of tuples
在我看到的所有示例中,esqueleto 的结果都投影到元组列表中。由于缺少标签,这使得编码和维护更加困难。
例如:
previousLogItems <- select $ from $ \li -> do
orderBy [desc (li ^. LogItemId)]
limit 10
return (li ^. LogItemId, li ^. LogItemTitle)
有没有办法让 esqueleto 将结果投影到记录列表中?
实际上你自己构造元组。确实:
previousLogItems <- select $ from $ \li -> do
orderBy [desc (li ^. LogItemId)]
limit 10
return <b>(li ^. LogItemId, li ^. LogItemTitle)</b>
因此您可以使用 (^.) :: (PersistEntity val, PersistField typ) => expr (Entity val) -> EntityField val typ -> expr (Value typ)
"selector" 来获取字段并将它们包装到一个元组中。
如果你这样写:
previousLogItems >- select $ from $ \li -> do
orderBy [desc (li ^. LogItemId)]
limit 10
return <b>li</b>
您将获得 [Entity Foo]
的列表,其中 Foo
是您查询的对象类型。
您可以使用entityVal :: Entity a -> a
获取包裹在Entity
中的实体,例如:
previousLogItems <- select $ from $ \li -> do
orderBy [desc (li ^. LogItemId)]
limit 10
return li
<b>mapM_ (print . entityVal) previousLogItems</b>
鉴于实体当然是 Show
的一个实例。
在我看到的所有示例中,esqueleto 的结果都投影到元组列表中。由于缺少标签,这使得编码和维护更加困难。
例如:
previousLogItems <- select $ from $ \li -> do
orderBy [desc (li ^. LogItemId)]
limit 10
return (li ^. LogItemId, li ^. LogItemTitle)
有没有办法让 esqueleto 将结果投影到记录列表中?
实际上你自己构造元组。确实:
previousLogItems <- select $ from $ \li -> do
orderBy [desc (li ^. LogItemId)]
limit 10
return <b>(li ^. LogItemId, li ^. LogItemTitle)</b>
因此您可以使用 (^.) :: (PersistEntity val, PersistField typ) => expr (Entity val) -> EntityField val typ -> expr (Value typ)
"selector" 来获取字段并将它们包装到一个元组中。
如果你这样写:
previousLogItems >- select $ from $ \li -> do
orderBy [desc (li ^. LogItemId)]
limit 10
return <b>li</b>
您将获得 [Entity Foo]
的列表,其中 Foo
是您查询的对象类型。
您可以使用entityVal :: Entity a -> a
获取包裹在Entity
中的实体,例如:
previousLogItems <- select $ from $ \li -> do
orderBy [desc (li ^. LogItemId)]
limit 10
return li
<b>mapM_ (print . entityVal) previousLogItems</b>
鉴于实体当然是 Show
的一个实例。