我有与User
关联的Hanami模型UserInfo
和has_one
。
存储库看起来如下:
class UserInfoRepository < Hanami::Repository
end
class UserRepository < Hanami::Repository
associations do
has_one :user_info
end
end
问题:我可以通过一个查询加入和加载两个表吗? (我正在寻找类似于Rails'includes
)的东西。
到目前为止,我已经尝试了
def users_with_info
users.join(:user_info)
end
它执行连接,但不从user_infos
表中选择列。
提前致谢。
答案 0 :(得分:2)
当您通过Hanami中的存储库获取数据时,结果集将映射到实体。
默认情况下,UserRepository
将映射到User
实体。我猜测该实体没有user_info
列的属性。
您需要做的是创建一个实体,该实体可以包含您要从数据库中提取的数据,然后在结果集上调用.as(ThatEntityYouCreated)
。如,
def users_with_info
users.join(:user_info).map_to(UserWithInfo)
end
如果您不想创建实体并且只想获得普通哈希,则可以执行以下操作:
users.join(:user_info).map.to_a
然而,我认为这是一个拐杖。您不应该从Repository方法返回Hashes。
答案 1 :(得分:0)
我相信我们在我们的一个Hanami项目中与我的队友面对这个确切的问题,这是 how we solved it。
我们基本上绕过Hanami存储库,直接使用 ROM::Relation#wrap
直接使用底层ROM关系,以便让我们的User
实体与感兴趣的实体联系。
让我们知道它是否对您有所帮助,或者您是否需要更多细节。干杯!