在Laravel中批量创建模型的最佳方法?



我正在创建一个功能,该功能涉及创建折扣凭证代码。我包含一个输入,用户可以用他们想要的具体金额填写。

当它到达商店方法说,如果用户已经输入了15张优惠券,你如何一次创建那么多的模型记录?

从laravel文档来看,我唯一看到的是使用工厂,所以我在下面尝试了一下。

public function storeCodes(Request $request, VoucherGroup $voucherGroup)
{
VoucherCode::create([
'code' => $this->generateUniqueCode(),
'group_id' => $voucherGroup->id,
'used' => 0
]);
session()->flash('success', 'successfully created codes.');
return back();
}
private function generateUniqueCode()
{
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersNumber = strlen($characters);
$code = '';
while (strlen($code) < 6) {
$position = rand(0, $charactersNumber - 1);
$character = $characters[$position];
$code = $code . $character;
}
if (VoucherCode::where('code', $code)->exists()) {
dd('lol');
$this->generateUniqueCode();
}
return $code;
}
输入>
<x-inputs.input size="6" type="number" name="voucher_amount" required>How many Voucher codes do you want
to
generate?
</x-inputs.input>

问题是它创建了模型,但是代码为每个模型返回相同的代码。

我如何在一个具有唯一代码字段的调用中创建15个模型?

下面的for循环为我解决了这个问题。它最初是由某人发布的,但最近被删除了,所以我会回答下面的问题,但感谢提供它的人!

$newVouchers = [];
for ($i = 0; $i < $request->voucher_amount; $i++) {
$newVouchers[] = VoucherCode::create([
'code' => $this->generateUniqueCode(),
'group_id' => $voucherGroup->id,
'used' => 0
]);
}

你可以试一下

do {
//generate unique code
$uniqueCode = strtoupper(substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, 15));
} while (VoucherCode::where('code', $uniqueCode)->exists());
VoucherCode::create([
'code' => $uniqueCode,
'group_id' => $voucherGroup->id,
'used' => 0
]);
session()->flash('success', 'successfully created codes.');
return back();

您可以使用Insert Statements批量创建模型

$voucher = [];For ($i = 0;美元我& lt;numberOfVoucher美元;$我+ +){$voucher [] = ["代码"=比;$ this→generateUniqueCode (),"group_id"=比;美元voucherGroup→id,"使用"=比;0];}DB:表("用户")→插入($券);

相关内容

  • 没有找到相关文章

最新更新