我需要一点帮助以下情况。
我愿意根据输入值saveMany
。让我举个代码示例。
我正在试验以下内容。
$data = [
'id' => 1,
'name' => 'example',
'number_of_slots' => 5,
'material' => 'Colo',
'equipment_status_code_id' => 1,
];
$platecontainer = PlateContainer::create($data);
foreach ($data as $key => $value) {
$platecontainer->containerSlots()->saveMany([
new ContainerSlot([
'plate_container_id' => $data['id'],
'slot' => $data['number_of_slots'],
'occuiped' => false,
])
]);
}
直到$platecontainer
一切正常。我想要的是当使用PlateContainer
数组创建data
时,我也想创建插槽,但这个插槽基于number_of_slots
因此,例如示例中的number_of_slots
为5
,因此我想在5
中以{降序顺序)保存ContainerSlot
条记录表
所以containerslots表最终会看起来像这样。
答案 0 :(得分:6)
save many方法接受一组模型,因此只需使用for
$plateContainer
number_of_slots
的{{1}}循环
$plateContainer = PlateContainer::create($data);
$containers = [];
// Need to add one to our number of slots because
// the $i count starts at one instead of zero.
$slots = $plateContainer->number_of_slots + 1;
for($i = 1; $i < $slots; $i++) {
$containers[] = new ContainerSlot([
'plate_container_id' => $placteContainer->getKey(),
'slot' => $i,
'occuiped' => false,
]);
}
$plateContainer->containerSlots()->saveMany($containers);
答案 1 :(得分:0)
另一种方法是,如果要基于值插入数据,则可以准备数组并让模型批量插入。
$itemRebates = array_map(function ($rebateId) use ($payoutItem) {
return [
'rebate_id' => $rebateId,
'payout_item_id' => $payoutItem->id
];
}, $rebateIds);
PayoutItemRebate::insert($itemRebates);
这样,您无需将数据包装在多个模型实例中。
我尝试使用insert
中的$payoutItem->historyRebates()
方法,但是没有从关系中获取payout_item_id
。因此最好使用模型本身。
我的第一个尝试是使用saveMany
,但是即使准备数据,它也不能用于数组,而只能用于模型实例。我想避免这种情况。
答案 2 :(得分:0)
您可以使用 createMany(属性数组的数组)而不是 saveMany(新的或现有的模型数组)。对 API 调用很有用。