elixir - Ecto:什么是where子句(理解语法)
问题描述
我正在浏览一本 Phoenix Liveview 书,我遇到了这条线:
|> where([d], d.user_id == ^user.id)
我试图理解这种语法。我尝试查找 Elixir Guards
,但这不是其中之一。这里是什么[d]
?这是某种匿名函数吗?
这是使用的函数:
def for_user(query \\ base(), user) do
query
|> where([d], d.user_id == ^user.id)
end
解决方案
where
是由 定义的宏ecto
。这就是你需要使用它的原因import Ecto.Query
,尽管在很多情况下你看不到,因为你有一个use MyApp.Schema
或类似的东西,它已经包含了导入。您可以在此处查看文档:Ecto.Query.where docs。
这[d]
是宏如何处理为要在 where 子句中使用的记录命名的方式。您可以将名称更改为任何名称,同时更改条件:
query
|> where([a_particular_record], a_particular_record.user_id == ^user.id)
请注意,宏还覆盖了什么^
意思 - 在宏内部它的意思是“从宏外部注入这个值”,这就是为什么你需要在之前使用它user.id
。
推荐阅读
- javascript - LUIS API - 是否有测试话语的端点?
- javascript - webgl 简单的图像效果
- process - 将数据传送到寻呼机
- sql - SQL Server:如何将字符串拆分为多行?
- yaml - 替换 openshift scc 受限 yaml 中的参数
- x86 - 如何了解 CPU 是否支持 ECC?
- python - 代码无法使用排序列表和用户输入找到正确的最小值或最大值?
- php - 本地与远程服务器中的 PHP CURL
- php - 使用 PHP 合并一些取决于范围的数组数据
- .net - 如何将 Windows 驱动程序工具包 (WDK) 安装到 Visual Studio 2017 Pro 中以便对 WinUSB 进行编程?