Der Versuch, SQL-Fragment auszuführen:Ecto SQL-Fragment schlägt fehl, warum?
Repo.all from p in Posts, where: fragment("lower(?) in ?", p.title, ^["some-title"])
Aber es fehlschlägt, erzeugt es folgende SQL und den Fehler:
SELECT p0."title" FROM "posts" AS p0 WHERE (lower(p0."title") in $1) [["some-title"]]
** (Postgrex.Error) ERROR (syntax_error): syntax error at or near "$1"
UPDATE: SOLUTION
ich also nach vielen Studien herausgefunden, wie man es benutzt:
Repo.all from p in Posts, where: fragment("lower(?)", p.title) in ^["some-title"])
Aber immer noch - warum der ursprüngliche Ausdruck nicht funktioniert hat? Es scheint, dass es auch absolut gültig ist.
UPDATE
There should be parentheses after
in
ich es versucht, funktioniert hat auch nicht:
Repo.all from p in Posts, where: fragment("lower(?) in (?)", p.title, ^["some-title"])
** (ArgumentError) Postgrex expected a binary that can be encoded/cast to type "text", got ["some-title"]. Please make sure the value you are passing matches the definition in your table or in your query or convert the value accordingly.
Es sollte Klammern nach 'in' sein. –