複数のデータベーステーブルに分割したいモデルがあります。すべてのデータと機能は同じですので、同じモジュール/ ecto.modelを使用したいのですが、保存されているテーブルが異なるだけです。さらに、私は実行時までテーブル名を知りません。エクトモデルのスキーマテーブル名を動的に設定する方法
誰でも動的に設定する方法を提案できますSCHEMAテーブル名?
複数のデータベーステーブルに分割したいモデルがあります。すべてのデータと機能は同じですので、同じモジュール/ ecto.modelを使用したいのですが、保存されているテーブルが異なるだけです。さらに、私は実行時までテーブル名を知りません。エクトモデルのスキーマテーブル名を動的に設定する方法
誰でも動的に設定する方法を提案できますSCHEMAテーブル名?
スキーマを必要とするほとんどの関数は、{"source", Schema}
の形式でタプルを受け取ります。ここで、sourceはテーブル名です。ソースも構造体によって適切に管理されているので、特定のソースから選択すると、更新/削除時に適切なテーブルに解決されます。既にビルド構造体に注釈を付けるためのEcto.put_meta(struct, source: "source")
もあります。
これらの機能は最近、さらに多くのユースケースをカバーするように拡張されました。この問題の詳細は、#1797です。
ありがとう! 'Ecto.put_meta(struct、source:" source ")'は、挿入/更新中に非常に役立つことが判明しました。 'Ecto.Repo.get_by/3'の助けを借りて同じテクニックを使用してデータを取得することは可能ですか? –
私はそれを理解しました。 '{" source "、Schema}"を 'Ecto.Repo.get_by/3'の最初の引数として渡すことができます。あなたのすべての協力に感謝します。 –
あなたの質問に対する答えはわかりませんが、同じテーブル名を使用して別のreposを使用することもできます。または、postgresを使用している場合は、アプリケーションに透過的にそのシャーディングを処理するcitusを見ることができます。 – Homan
これを選択するには、 'p from {" posts2 "、Post}、p.id == 1'のようなテーブル名/スキーマのタプルを渡すことができます。挿入するには、 'Repo.insert_all(" posts2 "、[...])'にテーブル名を渡すことができますが、 'Repo.insert'でこれをどうするのか分かりません。 – Dogbert
@Dogbertありがとう、あなたのコメントは私に今夜多くの時間を節約しました! –