在我的凤凰应用程序中,我想为单个记录运行get_by()
Ecto查询 - 但是,我要搜索的其中一个字段应评估为nil
,但Phoenix / Ecto禁止使用nil
作为比较运算符。
这是我的理想(但失败)查询:
target_record = Repo.get_by(Records, %{user_id: user_id, deleted_at: nil})
我可以在查询许多记录时使用nil
查询is_nil(field_name)
个字段,例如:
target_records = from(r in Records,
where: r.user_id == ^user_id,
where: is_nil(r.deleted_at))
|> Repo.all()
但是我不愿意将它用于我当前的任务,因为这将返回一个列表...我的Records
表可以有许多具有相同user_id
的条目,但只有一个条目将永远有deleted_at: nil
,所以我不需要取回一个项目列表然后将其转换成地图......
我的意思是,我可以这样做,但它看起来不太干净。
如何安排get_by
查询以便包含nil
值?
答案 0 :(得分:6)
const webgl2Header = `#version 300 es
#define texture2D texture
#define textureCube texture
`;
const webglHeader = `
#define in varying
#define out varying
`;
function prepShader(gl, source) {
const isWebGL2 = gl.texImage3D !== undefined
const header = isWebGL2 ? webgl2Header : webglHeader;
return header + source;
}
const vs = `
in vec4 position;
in vec2 texcoord;
out vec2 v_texcoord;
uniform sampler2D u_tex;
uniform mat4 u_matrix;
void main() {
gl_Position = u_matrix * (position + texture2D(u_tex, texcoord));
v_texcoord = texcoord;
}
`;
const vsSrc = prepSource(gl, vs);
和Repo.get
非常适合非常简单的查询。但是,当您需要超越自己的能力时,您需要进入Repo.get_by
API。使用此API构建的查询可与Ecto.Query
,Repo.one
和Repo.one!
一起使用。请注意,Repo.all
如果获得的记录超过1,则会提升。
所以,这应该有效:
Repo.one
可以写成:
target_records =
from(r in Records, where: r.user_id == ^user_id and is_nil(r.deleted_at))
|> Repo.one()