2016-03-20 38 views
0

我試圖使用Ecto.Adapters.SQL.query,它工作正常,但不適用於數組。例如該語句將失敗:如何在數組中使用Ecto.Adapters.SQL.query?

Ecto.Adapters.SQL.query Repo, "SELECT p.* FROM posts p WHERE p.title in ($1)", 
    [["title1", "title2"]] 

錯誤:

** (ArgumentError) Postgrex expected a binary that can be encoded/cast to 
type "text", got ["title1", "title2"]. Please make sure the value you are 
passing matches the definition in your table or in your query or convert 
the value accordingly. 

UPDATE

有沒有簡單的方法來做到這一點,但它不是外生的限制,這是一個限制SQL數據庫/ PostgreSQL,more details and workaround

很難相信,在2016年的SQL數據庫仍然固色等基本功能...

回答

2

我認爲這個問題的答案是非常從你前面的問題一樣。只需使用here中的in語法。

更新

要運行你的例子原始的SQL查詢,您可以使用以下方法:如果你使用的是Postgres

Ecto.Adapters.SQL.query(MyApp.Repo, "SELECT p.* FROM POSTS p WHERE p.TITLE IN ($1, $2)", ["title1", "title2"]) 
+0

謝謝,是的,使用Query DSL可以做到這一點,但仍然 - 執行原始SQL的能力似乎對SQL庫非常重要。我想看到答案 - 如何去做。 –

+0

@AlexeyPetrushin更新了答案 – JustMichael

+0

但是如何將結果渲染到視圖中,即如何使用'Ecto.Adapters.SQL.query(MyApp.Repo,..'?如何將結果傳遞給視圖?謝謝。 –