首页 > 解决方案 > 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

标签: elixirphoenix-frameworkecto

解决方案


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


推荐阅读