#laravel
#laravel
Вопрос:
В функции хранения контроллера у меня есть этот код:
public function store(RegisterAccountsRequest $request){
if($request->installment > 1){
foreach(range(1, $request->installment) as $installment) {
$data = new Financial;
$data->type = $request->type[0];
$data->payment = $request->payment[0];
$data->description = $request->description;
$data->status = $request->status;
$data->name = $request->name . " ( {$installment} / {$request->installment} )";
$data->value = ( $request->value / $request->installment );
if ($request->amount_paid == '0.00') {
$data->effective = 0;
} else {
$data->effective = 1;
}
$data->installment = $installment;
$data->due_date = $request->due_date;
$data->save();
$cf = new ClientFinancial;
$cf->client_id = Auth::user()->id;
$cf->financial_id = Financial::orderBy('id', 'desc')->first()->id;
$cf->save();
}
} else {
$data = new Financial;
$data->type = $request->type[0];
$data->payment = $request->payment[0];
$data->description = $request->description;
$data->status = $request->status;
$data->name = $request->name;
$data->value = $request->value;
if ($request->amount_paid == '0.00') {
$data->effective = 0;
} else {
$data->effective = 1;
}
$data->installment = 1;
$data->due_date = $request->due_date;
$data->save();
$cf = new ClientFinancial;
$cf->client_id = Auth::user()->id;
$cf->financial_id = Financial::orderBy('id', 'desc')->first()->id;
$cf->save();
}
return redirect()->route('admin.financials.index')
->with('success', "Conta cadastrada com sucesso!", $data);
}
Когда $request->installment
значение больше 1, затем выполняется первая часть кода e, он должен выполнить некоторые вычисления, которые я не понимаю, как хранить каждый взнос за каждый месяц, например:
due_date
________
30/10/2020
30/11/2020
30/12/2020
etc.
Надеюсь, я достаточно ясно выразился.
Помогите, пожалуйста!
Комментарии:
1. Чтобы убедиться, что я вас правильно понял: вы хотите, чтобы у каждого взноса был срок оплаты с шагом в 1 месяц (где взнос> 1)? Вы хотите, чтобы это приращение начиналось с
$request->due_date
?2. Да, именно так!
Ответ №1:
Я думаю, вам нужно что-то вроде этого:
public function store(RegisterAccountsRequest $request){
if($request->installment > 1){
$dueDate = Carbon::createFromFormat('d/m/Y', $request->due_date);
foreach(range(1, $request->installment) as $installment) {
$data = new Financial;
$data->type = $request->type[0];
$data->payment = $request->payment[0];
$data->description = $request->description;
$data->status = $request->status;
$data->name = $request->name . " ( {$installment} / {$request->installment} )";
$data->value = ( $request->value / $request->installment );
if ($request->amount_paid == '0.00') {
$data->effective = 0;
} else {
$data->effective = 1;
}
$data->installment = $installment;
$data->due_date = $dueDate->format('d/m/Y');
$dueDate->addMonth();
$data->save();
$cf = new ClientFinancial;
$cf->client_id = Auth::user()->id;
$cf->financial_id = Financial::orderBy('id', 'desc')->first()->id;
$cf->save();
}
} else {
$data = new Financial;
$data->type = $request->type[0];
$data->payment = $request->payment[0];
$data->description = $request->description;
$data->status = $request->status;
$data->name = $request->name;
$data->value = $request->value;
if ($request->amount_paid == '0.00') {
$data->effective = 0;
} else {
$data->effective = 1;
}
$data->installment = 1;
$data->due_date = $request->due_date;
$data->save();
$cf = new ClientFinancial;
$cf->client_id = Auth::user()->id;
$cf->financial_id = Financial::orderBy('id', 'desc')->first()->id;
$cf->save();
}
return redirect()->route('admin.financials.index')
->with('success', "Conta cadastrada com sucesso!", $data);
}
В этом случае я создаю экземпляр Carbon
(carbon docs) с датой due_date
.
После использования значения, подобного so $data->due_date = $dueDate->format('d/m/Y');
, а затем добавления одного месяца, подобного so $dueDate->addMonth();
, у меня есть новый месяц, доступный для каждой итерации.
Комментарии:
1. Спасибо @Rob Biermann. Это работает как ветер, и это не так сложно, как я думал!