ZATRANO
if($preSale = PreSale::firstWhere('id', $request->input('pre_sale_id'))) {
$preSale->customer_id = $customer->id;
$preSale->save();
}
foreach($request->input('training_id') as $i => $trainingId) {
$sale = Sale::create([
'is_active' => 1,
'branch_id' => $request->input('branch_id'),
'staff_id' => $request->input('staff_id'),
'customer_id' => $customer->id,
'training_id' => $trainingId,
'sale_date' => $request->input('sale_date'),
'is_confirmed' => 0,
'confirmed_date' => null,
'is_cancelled' => 0,
'cancelled_date' => null,
'amount' => $request->input("amount.{$i}"),
'data_source_id' => $request->input('data_source_id'),
]);
DB::table('temp_sales')
->where('id', $request->input("temp_sale_id.{$i}"))
->update([
'customer_id' => $customer->id
]);
Transaction::create([
'customer_id' => $customer->id,
'payment_type' => 'ALACAK',
'payment_method' => 'HAVALE',
'sale_id' => $sale->id,
'payment_date' => now()->toDateString(),
'amount' => $request->input("amount.{$i}"),
'staff_id' => $request->input('staff_id'),
'notes' => $request->input("training.name.{$i}"),
]);
}
Notlar:
Request içindeki anahtara $request->input('sale_date')
şeklinde ulaşın. Request::input()
array anahtarlara daha kolay ulaşmanızı sağlar, $request->input("training.name.{$i}")
gibi.
—
Özellikle değiştirmediyseniz, modeldeki created_at ve updated_at alanları Eloquent kullandığınız taktirde otomatik dolar. Elle tarih vermenize gerek yok.
—
Hash::make('123456')
yerine bcrypt('123456')
kullanabilirsiniz.
—
User ile Address arasında HasOne ya da HasMany ilişkisi kurarsanız şu şekilde adres oluşturabilirsiniz. Aynısı diğer modeller için de geçerli:
$customer = User:create([...]);
// Buradaki dizide artık customer_id kullanmanıza gerek yok, otomatik dolacak
$customer->address()->create([...]);
$customer->sales()->create([...]);
$customer->transactions()->create([...]);
https://laravel.com/docs/8.x/eloquent-relationships
—
date('Y-m-d')
yerine Date
kullanın. Date::now()->toDateString()
gibi.
—
'payment_type' => 'ALACAK',
'payment_method' => 'HAVALE',
Bu tür alanlar için constant kullanın. Mesela:
'payment_type' => Transaction::RECEIVABLE,
'payment_method' => Transaction::MONEY_ORDER,
gibi
—
Burada ilk satırda $preSale null dönerse ikinci satırda hata alırsınız, o yüzden önce null dönmediğinden emin olun:
$preSale = PreSale::where('id', $request->pre_sale_id)->first();
$preSale->customer_id = $customer->id;
$preSale->save();
—
PHP'de sizeof() ile count() aynıdır ama sizeof() deyince akla farklı işlemler geliyor. O yüzden PHP'de count() tercih edin. ben hayatım boyunca PHP'de sizeof kullanmadım
—
Tek bir controller yönteminde tüm işleri yapmaya çalışmayın. Şu an yazdığınız koda göre, "her şey hatasız çalışır ise çalışır" mantığı var. Örneğin Sale::create($sale);
kısmında hata alırsanız bu storeSale yöntemini bir daha kullanamazsınız çünkü tekrar yöntemi tetiklediğinizde müşteri ve adresi zaten oluşturulmuş olacak. Çok yanlış bir akış...