elixir - 是否可以合并两个单独的 ecto 查询?
问题描述
我想知道是否可以将两个查询组合在一起。
我想创建一个函数,它接受 ecto 查询并根据情况对其进行修改。
例如,假设我们有一个users
允许usernames
输入重复项的表,并且用户创建了以下查询...
query = from(u in "users", select: u)
select_all_unique_users(query)
我希望该select_all_unique_users
函数采用query
并添加到它,以便它只选择不同的用户名。
这只是一个例子,我知道我可以
unique_index
在桌子上创建一个来避免这种情况=D
作为query
引擎盖下的结构,我想我可以更新distinct
密钥来做到这一点。这似乎可行,但缺点是它似乎不是很灵活,而且如果我想添加更复杂的逻辑,看起来很难实现。
简而言之,我想做的是创建一个接受查询并向其添加更多逻辑的函数......
iex()> query = from(u in "users", select: u)
#Ecto.Query<from u0 in "users", select: u0>
iex()> select_all_unique_users(query)
#Ecto.Query<from u0 in "users", distinct: [asc: u0.username], select: u0>
解决方案
select_all_unique_users 函数将像这样实现:
defmodule TestModule do
def select_all_unique_users(q) do
from u in q, distinct: u.username
end
end
你可以像下面这样使用它:
iex(2)> query = from(u in "users", select: u)
#Ecto.Query<from u in "users", select: u>
iex(3)> distinct = TestModule.select_all_unique_users(query)
#Ecto.Query<from u in "users", distinct: [asc: u.username], select: u>
我包装select_all_unique_users
了我为此答案创建的模块,但是您可以将其放置在您认为合适的任何模块中。
推荐阅读
- python - python中的链表实现
- typescript - 在 Typescript 中,如何在我知道键但不知道路径的情况下检索深度嵌套的属性类型?
- flutter - 尝试按照文档使用 StateNotifierProvider
- c# - 错误 CS0122 'Rigidbody.AddForce(Vector3)' 由于其保护级别而无法访问
- python-3.x - 在 Django 包中添加对 Alpine.js 的支持
- python - Python Mock_requests:我可以在 Mocker 的 url 参数中使用通配符吗?与pytest一起使用时如何实现url的模式匹配?
- coordinates - 如何测量从矢量坐标到光栅像素的距离?
- xslt - 如何将脚本生成的文本复制到输出文件的另一部分?
- spfx - SPFx 1.12.1 项目中 @fluentui/react-file-type-icons 的 tsc 错误
- r - ROI求解器多参数目标函数