在 ecto 中组合两个 where 查询
Combine two where queries in ecto
我正在尝试创建一个 ecto 查询,该查询 returns 两个查询都满足时的结果。当我 运行 应用程序时,出现错误 function nil.title/0 is undefined or private
。这是因为我没有正确的查询吗?我想要两个位置上的 AND。
def next_prod do
Post |> where(postStatus: "published") |> where(next_prod: "yes") |> Repo.one()
end
SQL查询
您会看到有一条记录应与 ecto 查询相匹配。
iex(1)> Codsonline.Repo.query("SELECT * FROM posts")
[debug] QUERY OK db=3.0ms queue=0.1ms
SELECT * FROM posts []
{:ok,
%Postgrex.Result{columns: ["id", "title", "snippet", "body", "slug", "mainImg",
"thumbImg", "postStatus", "showStatus", "inserted_at", "updated_at",
"next_prod"], command: :select, connection_id: 13732, num_rows: 1,
rows: [[8, "Blackadder Goes Forth",
"“Blackadder Goes Forth ” is the fourth and final part of the Blackadder series . A theatrical Dramatisation inspired by the TV episodes. Follow the Wit and Sarcasm of Captain BlackAdder in Oscar Wilde language.",
"27th January – 03rd February 2018\r\nPlayhouse Theatre, Cheltenham\r\n\r\n \r\n\r\nEpisodes:\r\n‘Corporal Punishment‘ (Episode 2)\r\n‘Private Plane‘ (Episode 4)\r\n‘Goodbyeee‘ (Episode 6)\r\n\r\nDirected by Nick Tobias & Liz White\r\n\r\n \r\n\r\nCast List:\r\n\r\nCaptain Edmund Blackadder – Chris Hannant\r\nPrivate S Baldrick – Matt Wilson\r\nLt. Hon. George Colthurst St Barleigh – UNCAST\r\nGeneral Sir Anthony Cecil Hogmanay Melchett – Jason Blackburn\r\nCaptain Kevin Darling – Jack Homer\r\nSquadron Commander the Lord Flashheart – Michael Fay\r\nField Marshall Sir Douglas Haig – Will Browne\r\nBaron Von Richthoven – Robert Barton-Ancliffe\r\nBob ‘Bobbie’ Parkhurst – Sarah Bottomley\r\n\r\nEnsemble – Ben Wilson (Sergeant Jones), Oliver Chapman (Gerhardt), Michael Sheldrick (Perkins), Steve Scott, Matthew Morris",
"blackadder-goes-forth", ".", ".", "published", "Future",
{{2017, 11, 18}, {22, 36, 19, 408441}},
{{2017, 11, 18}, {23, 3, 42, 816258}}, "Yes"]]}}
该错误不是来自这行代码。您的代码很好,这两个子句将由 Ecto 进行 AND 运算。该错误意味着您试图在某处调用 nil.title
。
iex(1)> nil.title
** (UndefinedFunctionError) function nil.title/0 is undefined or private
nil.title()
我猜您在该函数的 return 值上调用了 .title
,而您实际上在数据库中没有匹配这两个条件的记录。如果要确保记录存在,则应使用 Repo.one!
。或者如果你想处理记录不存在的情况,使用 if
:
if record = Thing.next_prod do
# record exists
else
# it doesn't
end
我正在尝试创建一个 ecto 查询,该查询 returns 两个查询都满足时的结果。当我 运行 应用程序时,出现错误 function nil.title/0 is undefined or private
。这是因为我没有正确的查询吗?我想要两个位置上的 AND。
def next_prod do
Post |> where(postStatus: "published") |> where(next_prod: "yes") |> Repo.one()
end
SQL查询
您会看到有一条记录应与 ecto 查询相匹配。
iex(1)> Codsonline.Repo.query("SELECT * FROM posts")
[debug] QUERY OK db=3.0ms queue=0.1ms
SELECT * FROM posts []
{:ok,
%Postgrex.Result{columns: ["id", "title", "snippet", "body", "slug", "mainImg",
"thumbImg", "postStatus", "showStatus", "inserted_at", "updated_at",
"next_prod"], command: :select, connection_id: 13732, num_rows: 1,
rows: [[8, "Blackadder Goes Forth",
"“Blackadder Goes Forth ” is the fourth and final part of the Blackadder series . A theatrical Dramatisation inspired by the TV episodes. Follow the Wit and Sarcasm of Captain BlackAdder in Oscar Wilde language.",
"27th January – 03rd February 2018\r\nPlayhouse Theatre, Cheltenham\r\n\r\n \r\n\r\nEpisodes:\r\n‘Corporal Punishment‘ (Episode 2)\r\n‘Private Plane‘ (Episode 4)\r\n‘Goodbyeee‘ (Episode 6)\r\n\r\nDirected by Nick Tobias & Liz White\r\n\r\n \r\n\r\nCast List:\r\n\r\nCaptain Edmund Blackadder – Chris Hannant\r\nPrivate S Baldrick – Matt Wilson\r\nLt. Hon. George Colthurst St Barleigh – UNCAST\r\nGeneral Sir Anthony Cecil Hogmanay Melchett – Jason Blackburn\r\nCaptain Kevin Darling – Jack Homer\r\nSquadron Commander the Lord Flashheart – Michael Fay\r\nField Marshall Sir Douglas Haig – Will Browne\r\nBaron Von Richthoven – Robert Barton-Ancliffe\r\nBob ‘Bobbie’ Parkhurst – Sarah Bottomley\r\n\r\nEnsemble – Ben Wilson (Sergeant Jones), Oliver Chapman (Gerhardt), Michael Sheldrick (Perkins), Steve Scott, Matthew Morris",
"blackadder-goes-forth", ".", ".", "published", "Future",
{{2017, 11, 18}, {22, 36, 19, 408441}},
{{2017, 11, 18}, {23, 3, 42, 816258}}, "Yes"]]}}
该错误不是来自这行代码。您的代码很好,这两个子句将由 Ecto 进行 AND 运算。该错误意味着您试图在某处调用 nil.title
。
iex(1)> nil.title
** (UndefinedFunctionError) function nil.title/0 is undefined or private
nil.title()
我猜您在该函数的 return 值上调用了 .title
,而您实际上在数据库中没有匹配这两个条件的记录。如果要确保记录存在,则应使用 Repo.one!
。或者如果你想处理记录不存在的情况,使用 if
:
if record = Thing.next_prod do
# record exists
else
# it doesn't
end