【发布时间】:2021-08-18 21:30:24
【问题描述】:
我正在尝试编写一个 Ecto 查询,其中参数可以是 ID 或其他字段,在本例中是用户名。例如,像这样:
from(u in User, where: (u.id == ^id_or_username or u.username == ^id_or_username) and is_nil(u.deleted_at))
问题是当字符串id_or_username不是有效的binary_id时,Ecto会报错:
** (Ecto.Query.CastError) lib/myproject/accounts.ex:55: value `"user1@email.com"` cannot be dumped to type :binary_id in query:
from u0 in MyProject.Accounts.User,
where: (u0.id == ^"user1@email.com" or u0.username == ^"user1@email.com") and is_nil(u0.deleted_at),
select: u0
我怎样才能做到这一点?
我想到的一个解决方案是检查字符串是否为 binary_id 并以不同方式查询,但这不是最优雅的方法。尽管如此,Ecto 中是否有一个功能可以做这样的事情?如何确定字符串是否为 Ecto binary_id?我可以正则表达式检查它,但宁愿不这样做。
【问题讨论】:
标签: elixir phoenix-framework ecto