Elixir 当一个表的主键是一个关联的id时,如何做
我正在为freeradius mysql开发RESTAPI(所以我不管理数据库…) Freeradius有一个奇怪的模式: “组”表: “用户”表: 我的问题是我想做: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
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