Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 如何在Repo.one中使用Repo.get和select like_Elixir_Phoenix Framework_Ecto - Fatal编程技术网

Elixir 如何在Repo.one中使用Repo.get和select like

Elixir 如何在Repo.one中使用Repo.get和select like,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,我不确定这是否可行,但我喜欢Repo.get返回结构的事实 我试着做一些类似的事情: Repo.get(User, id, select: [:id, :name]) def from_token("User:" <> id), do: {:ok, Repo.get(User, id,)} 例如: Repo.one(from u in User, where: u.id == ^id, select: [u.id, u.name] 但是对于Repo.get,我无法从EXTO文档

我不确定这是否可行,但我喜欢Repo.get返回结构的事实

我试着做一些类似的事情:

Repo.get(User, id, select: [:id, :name])
def from_token("User:" <> id), do: {:ok, Repo.get(User, id,)}
例如:

Repo.one(from u in User, where: u.id == ^id, select: [u.id, u.name]
但是对于Repo.get,我无法从EXTO文档中判断它是否可能以及如何实现这一点

上下文:我正在使用Guardian,序列化程序执行以下操作:

Repo.get(User, id, select: [:id, :name])
def from_token("User:" <> id), do: {:ok, Repo.get(User, id,)}
def from_令牌(“用户:”id),do:{:确定,Repo.get(用户,id,)}

因此,当我调用
current\u resource(conn)
时,我会得到一个方便的用户结构。但此查询返回我试图筛选的数据库中用户的所有信息(例如,我不希望在我的
当前\u资源(conn)

中使用加密密码),正如@Dogbert在注释中提到的,解决方案是:

import Ecto.Query

from(User) |> select([:id, :name]) |> Repo.get(id)
在guardian序列化程序中:

import Ecto.Query

....

def from_token("User:" <> id), do: {:ok, from(User) |> select([:id, :name]) |> Repo.get(id)}

.....
导入外部查询
....
def from_token(“User:”id),do:{:确定,from(User)|>select([:id,:name])|>Repo.get(id)}
.....
从文档中:

get(可查询、id、opts) get(queryable::exto.queryable.t,id::term,opts::Keyword.t):: 异位模式| 零| 不归

从主键与给定id匹配的数据存储中获取单个结构

如果未找到结果,则返回nil。如果查询表中的结构没有或有多个主键,则将引发参数错误

如前所述,
get/3
等待的第一个参数是一个查询表。这就是为什么我们可以使用
from(User)|>select([:id,:name])
构造查询表,然后将其传递给
Repo.get(id)

这将返回基于
用户
模型的结构

正如上面提到的:

每个模型都定义了模式的字段及其类型。 它们各自使用模式中相同的字段定义一个结构


因此,返回的结构将在模型/架构中描述所有字段,但在我们不选择它们的情况下使用nil值。

因此,您需要一个包含
id
name
的列表,而不是一个结构,如果给定用户不存在,但使用
Repo.get
,则使用
nil
?我想要一个结构/n我喜欢Repo.get。列表不是“期望的行为”。id和名称只是示例。如文档中所述,Repo.get正在返回一个结构,而Repo.one不返回。但是我可以将select与Repo.one一起使用,我不知道如何将select与Repo.get一起使用。因此,您想要一个结构,但只返回特定字段?结构的其余字段应该是
nil
,然后再试一次(您可能需要导入
exto.Query
):
from(User)|>select([:id,:name])|>Repo.get(id)
(我不确定为什么会这样做,但它似乎起作用。)