Elixir 在单个事务中插入多个变更集
我有一张桥牌桌:Elixir 在单个事务中插入多个变更集,elixir,ecto,Elixir,Ecto,我有一张桥牌桌: schema "rooms_units" do field(:date_from, :utc_datetime) field(:date_to, :utc_datetime) belongs_to(:room, App.Room, primary_key: true) belongs_to(:unit, App..Unit) end 我有来自我的端点的映射列表,我为每个映射创建了一个变更集列表 [ #Ecto.Changeset< action: n
schema "rooms_units" do
field(:date_from, :utc_datetime)
field(:date_to, :utc_datetime)
belongs_to(:room, App.Room, primary_key: true)
belongs_to(:unit, App..Unit)
end
我有来自我的端点的映射列表,我为每个映射创建了一个变更集列表
[
#Ecto.Changeset<
action: nil,
changes: %{
date_from: #DateTime<2016-11-03 13:23:00Z>,
date_to: #DateTime<2016-11-03 13:23:00Z>,
room_id: 255,
unit_id: 296
},
errors: [],
data: #App.RoomUnit<>,
valid?: true
#Ecto.Changeset<
action: nil,
changes: %{
date_from: #DateTime<2016-11-03 13:23:00Z>,
date_to: #DateTime<2016-11-03 13:23:00Z>,
room_id: 256,
unit_id: 296
},
errors: [],
data: #App.RoomUnit<>,
valid?: true
>
]
[
#外部变更集<
行动:无,
变化:%{
日期_自:#日期时间,
日期_至:#日期时间,
房间号:255,
编号:296
},
错误:[],
数据:#App.RoomUnit,
有效?:正确
#外部变更集<
行动:无,
变化:%{
日期_自:#日期时间,
日期_至:#日期时间,
房间号:256,
编号:296
},
错误:[],
数据:#App.RoomUnit,
有效?:正确
>
]
我想在单个事务中将其插入rooms\u units
表中
我尝试了exto.multi.insert\u all
。但它接受的是映射列表,而不是变更集。有没有其他功能可以帮助我解决这个问题
谢谢使用
但它将分别进行插入:
begin[]01:55:34.104[debug]QUERY OK db=0.7ms插入“表”。。。01:55:34.104[调试]查询OK db=0.3ms插入“表”。。。01:55:34.106[debug]QUERY OK db=1.2ms commit[]
是否有任何方法可以在一次插入中完成?也可以在这样一次批量插入后返回inserted_?并执行批量插入,但不会更新计算字段,如inserted\u at
和updated\u at
,这意味着应该手动准备和填充这些字段。
MyRepo.transaction(fn ->
Enum.each(changesets, &MyRepo.update!(&1, []))
end)