0

我在我的 PostgresDB 中准备了视图,名为user_details. 我创建了UserDetail实体和UserDetailRepository. 在这里,您缩短了我的视图以可视化我的问题:

CREATE VIEW user_details AS
SELECT id, user_name FROM users WHERE user_name like '$1#%'

我的问题是如何使用 Hanami 存储库注入参数?

我可以在我的 repos 中使用原始 sql,这里描述了http://hanamirb.org/guides/models/repositories/但我更喜欢使用迁移在 postgres 中创建视图。我不想改进查询,但想知道我是否可以使用 Hanami 进行参数化查询。感谢所有答案

4

1 回答 1

1

PostgreSQL 不支持您描述的方式的参数化视图。它可以具有调用函数的视图,该函数可以访问当前会话状态,您可以在从视图中选择数据之前设置该状态。但是,我建议您定义一个带有参数的方法

class UserRepo
  def user_details(prefix)
    root.project { [id, user_name] }.where { user_name.ilike("#{ prefix }%") }.to_a
  end
end

你得到的基本上是一样的。如果您想user_details用作基础关系,您可以在 repo 上定义一个私有方法并从其他公共方法调用它

class UserRepo
  def user_details_filtered(user_name, min_user_id = 0)
    user_details(prefix).where { id > min_user_id }.to_a
  end

  def user_details_created_after(user_name, after)
    user_details(prefix).where { created_at > after }.to_a
  end

  private 

  # Don't call this method from the app code, this way
  # you don't leak SQL-specific code into your domain
  def user_details(prefix)
    root.project { [id, user_name] }.where { user_name.ilike("#{ prefix }%") }
  end
end
于 2017-07-27T19:53:41.560 回答