如何在Hanami中使用一个SQL查询从多个表中获取数据?

时间:2018-04-24 21:48:17

标签: ruby hanami ruby-object-mapper

我有与User关联的Hanami模型UserInfohas_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表中选择列。

提前致谢。

2 个答案:

答案 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实体与感兴趣的实体联系。

让我们知道它是否对您有所帮助,或者您是否需要更多细节。干杯!