2

我有 Hanami 模型User并且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表中选择列。

提前致谢。

4

2 回答 2

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

但是,我认为这是一个拐杖。您不应该从您的存储库方法返回哈希值。

于 2018-04-25T07:56:59.280 回答
1

我相信我们在一个 Hanami 项目中与我的一位队友遇到了这个确切的问题,这就是我们解决它的方法。

我们基本上绕过了 Hanami 存储库,直接进入底层 ROM 关系,ROM::Relation#wrap以便让我们User的实体与感兴趣的实体连接。

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

于 2018-04-26T23:49:39.577 回答