Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 当一个表的主键是一个关联的id时,如何做_Elixir_Phoenix Framework_Ecto - Fatal编程技术网

Elixir 当一个表的主键是一个关联的id时,如何做

Elixir 当一个表的主键是一个关联的id时,如何做,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,我正在为freeradius mysql开发RESTAPI(所以我不管理数据库…) Freeradius有一个奇怪的模式: “组”表: “用户”表: 我的问题是我想做: schema "radusergroup" do belongs_to :user, Rascal.User, foreign_key: :username, references: :username, type: :string, primary_key: true field :priority, :integer

我正在为freeradius mysql开发RESTAPI(所以我不管理数据库…) Freeradius有一个奇怪的模式:

“组”表:

“用户”表:

我的问题是我想做:

schema "radusergroup" do
  belongs_to :user, Rascal.User, foreign_key: :username, references: :username, type: :string, primary_key: true
  field :priority, :integer
  field :groupname, :string
end
但星外组织不允许。 有没有办法轻松地做这件事


谢谢

我已尝试实现您需要的结构

迁移 用户:

组:

defmodule ExampleApp.Repo.Migrations.CreateGroup do
  use Ecto.Migration

  def change do
    create table(:radusergroup) do

      add :username, references(:userinfo, on_delete: :nothing, column: :username, type: :string)

      add :priority, :integer
      add :groupname, :string

      timestamps
    end
    create index(:radusergroup, [:username])

  end
end
defmodule ExampleApp.Group do
  use ExampleApp.Web, :model

  schema "radusergroup" do
    belongs_to :username, ExampleApp.Username, references: :username, type: :string

    field :priority, :integer
    field :groupname, :string

    timestamps
  end

  @required_fields ~w()
  @optional_fields ~w()

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end
模型 用户:

组:

defmodule ExampleApp.Repo.Migrations.CreateGroup do
  use Ecto.Migration

  def change do
    create table(:radusergroup) do

      add :username, references(:userinfo, on_delete: :nothing, column: :username, type: :string)

      add :priority, :integer
      add :groupname, :string

      timestamps
    end
    create index(:radusergroup, [:username])

  end
end
defmodule ExampleApp.Group do
  use ExampleApp.Web, :model

  schema "radusergroup" do
    belongs_to :username, ExampleApp.Username, references: :username, type: :string

    field :priority, :integer
    field :groupname, :string

    timestamps
  end

  @required_fields ~w()
  @optional_fields ~w()

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end

它符合您的需要吗?

请显示您的迁移。
defmodule ExampleApp.User do
  use ExampleApp.Web, :model

  @primary_key {:username, :string, autogenerate: false}
  schema "userinfo" do
    has_one :group, ExampleApp.Group, foreign_key: :username, on_delete: :delete_all

    timestamps
  end

  @required_fields ~w()
  @optional_fields ~w()

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end
defmodule ExampleApp.Group do
  use ExampleApp.Web, :model

  schema "radusergroup" do
    belongs_to :username, ExampleApp.Username, references: :username, type: :string

    field :priority, :integer
    field :groupname, :string

    timestamps
  end

  @required_fields ~w()
  @optional_fields ~w()

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end