【问题标题】:With Elixir Ecto, how do I add a has_many relationship in a migration?使用 Elixir Ecto,如何在迁移中添加 has_many 关系?
【发布时间】:2015-03-14 19:44:30
【问题描述】:

我想写这样的东西:

defmodule JobHunt.Repo.Migrations.CompaniesHaveManyJobs do
  use Ecto.Migration

  def change do
    alter table (:companies) do
      add :jobs, :has_many, Job
    end
  end
end

使用此迁移运行 mix ecto.migrate 会出现错误,那么正确的方法是什么?

【问题讨论】:

    标签: elixir ecto


    【解决方案1】:

    您可以按照文档的建议使用这种方式:

    alter table(:jobs) do
      add :company_id, references(:companies)
    end
    

    我不确定这里是否需要复数版本:references(:companies) 但它不适用于 phermacy(单数)

    【讨论】:

    • 关于您的问题,我相信它是复数形式,因为您引用的是数据库表而不是 Ecto 架构或 Phoenix 上下文。
    【解决方案2】:

    您应该将所需的外键添加到作业表中:

    defmodule JobHunt.Repo.Migrations.CompaniesHaveManyJobs do
      use Ecto.Migration
    
      def change do
        alter table(:jobs) do
          add :company_id, :integer
        end
      end
    end
    

    【讨论】:

    • 好点。这会更新数据库。为了使其可以从 Ecto 访问,我将 belongs_to :company, JobHunt.Company 添加到 web/models/job.ex 的架构部分。
    • @Jose 为什么是 :integer 而不是 references(:comapnies)?有什么明显的区别吗?
    • 使用引用更好,是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多