Laravel 5:如何根据值

时间:2015-12-11 14:49:04

标签: php laravel

我需要一点帮助以下情况。

我愿意根据输入值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_slots5,因此我想在5中以{降序顺序)保存ContainerSlot条记录表

所以containerslots表最终会看起来像这样。

enter image description here

3 个答案:

答案 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 调用很有用。