これは理論的な質問ですが、データ構造が変更できないこと、そしてこれが間違いなくクエリを実行する方法であると仮定します。この質問は、の詳細な理解を得るために、実際にはのように、where
フィルタを動的に作成するのではなく、実際にこのようなクエリの結果を得たいと思っています。動的な量のEctoクエリを作成するフィルタ
各車に "BD324"または "GM512"などのIDを含むmanufacturer_id
列があり、 "BD" & "GM"が接頭辞とみなされるCarテーブルのデータベースを想像してください。
manufacturer_id
の接頭辞が与えられた接頭辞のセットと一致すると車が返されるように、車のテーブルを検索する必要があります。だから、接頭辞のリストを与えられた:
prefixes = ["BD", "GM", "EX", "RD", "DE"]
が記載されているもののいずれかで始まるmanufacturer_id
を持っているすべての車を返したい..we'd。すなわち(LIKE x または好きy または好き)。
次エリクシール/エクトのコードは、1つの接頭辞を検索します:
search_prefix = Enum.at(prefixes, 0) <> "%"
from c in Car, where: like(c.manufacturer_id, ^search_prefix)
はどのように我々はprefixes
リストに基づいてwhere
句を構築して行くのでしょうか?
ありがとう! IRCでJoséに話しかけてください。これは確かに(少なくとも今のところは)行く方法です。あなたが持っている要件がORではなくANDであるなら、acc:でqからのreduce: 'Enum.reduce prefixes、query、fn prefix、acc - >を使うことができます:like(q.manufacturer_id、^(接頭辞< > "%"))end' –
またはEcto 2.1でクエリが追加されました。https://github.com/elixir-ecto/ecto/commit/640e8f5f7f97eab68e4eebcd517803f71d90ebc1#commitcomment-18945603 –