खोज…


एक अमृत कार्यक्रम में एक Ecto.Repo जोड़ना

यह 3 चरणों में किया जा सकता है:

  1. आपको एक अमृत मॉड्यूल को परिभाषित करना होगा जो Ecto.Repo का उपयोग करता है और एक otp_app के रूप में आपके ऐप को पंजीकृत करता है।

    defmodule Repo do
      use Ecto.Repo, otp_app: :custom_app
    end
    
  2. आपको रेपो के लिए कुछ कॉन्फिगर को भी परिभाषित करना होगा जो आपको डेटाबेस से जुड़ने की अनुमति देगा। यहाँ पोस्टग्रेज के साथ एक उदाहरण दिया गया है।

    config :custom_app, Repo,
       adapter: Ecto.Adapters.Postgres,
       database: "ecto_custom_dev",
       username: "postgres_dev",
       password: "postgres_dev",
       hostname: "localhost",
      # OR use a URL to connect instead
      url: "postgres://postgres_dev:postgres_dev@localhost/ecto_custom_dev"
    
  3. अपने आवेदन में एक्टो का उपयोग करने से पहले, आपको यह सुनिश्चित करने की आवश्यकता है कि एक्टो आपके ऐप के शुरू होने से पहले शुरू हो। यह एक पर्यवेक्षक के रूप में lib / custom_app.ex में Ecto को पंजीकृत करने के साथ किया जा सकता है।

        def start(_type, _args) do
          import Supervisor.Spec
    
          children = [
           supervisor(Repo, [])
          ]
    
          opts = [strategy: :one_for_one, name: MyApp.Supervisor]
          Supervisor.start_link(children, opts)
        end
    

Repo.get_by / 3 में "और" खंड

यदि आपके पास Ecto.Queryable है, जिसका नाम पोस्ट है, जिसका शीर्षक और विवरण है।

आप पोस्ट को शीर्षक के साथ ला सकते हैं: "हैलो" और विवरण: "विश्व" प्रदर्शन करके:

 MyRepo.get_by(Post, [title: "hello", description: "world"])

यह सब संभव है क्योंकि Repo.get_by दूसरे तर्क में एक कीवर्ड सूची की अपेक्षा करता है।

गतिशील क्षेत्रों के साथ क्वेरी

किसी फ़ील्ड को नाम देने के लिए जिसे एक चर में शामिल किया गया है, फ़ील्ड फ़ंक्शन का उपयोग करें।

some_field = :id
some_value = 10

from p in Post, where: field(p, ^some_field) == ^some_value

माइग्रेशन और स्कीमा में कस्टम डेटा प्रकार जोड़ें

(इस जवाब से)

नीचे दिया गया उदाहरण एक एनरमिटेड प्रकार को पोस्टग्रेज डेटाबेस में जोड़ता है।

सबसे पहले, माइग्रेशन फ़ाइल संपादित करें ( mix ecto.gen.migration के साथ बनाई गई):

def up do
  # creating the enumerated type
  execute("CREATE TYPE post_status AS ENUM ('published', 'editing')")

  # creating a table with the column
  create table(:posts) do
    add :post_status, :post_status, null: false
  end
end

def down do
  drop table(:posts)
  execute("DROP TYPE post_status")
end

दूसरा, मॉडल फ़ाइल में या तो एक अमृत प्रकार के साथ एक फ़ील्ड जोड़ें:

schema "posts" do
  field :post_status, :string
end

या Ecto.Type व्यवहार को लागू करें।

उत्तरार्द्ध के लिए एक अच्छा उदाहरण ecto_enum पैकेज है और इसका उपयोग टेम्पलेट के रूप में किया जा सकता है। इसका उपयोग इसके जीथूब पेज पर अच्छी तरह से प्रलेखित है।

यह प्रतिबद्ध एक फीनिक्स परियोजना में enum_ecto को परियोजना से जोड़ने और दृश्य और मॉडल में प्रगणित प्रकार का उपयोग करने में एक उदाहरण उपयोग दिखाता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow