TurkMvc YemGiris ve YemGirisHareket şeklinde iki modeliniz var diyelim. YemGiris içine ilişki ekleyeceksiniz:
public function yemGirisHareketleri(): HasMany
{
return $this->hasMany(YemGirisHareket::class, 'yem_giris_id');
}
Aynı şekilde müşterileri tuttuğunuz modelin de User olduğunu varsayarsak ona da YemGiris için ilişki ekleyeceksiniz:
public function yemGirisleri(): HasMany
{
return $this->hasMany(YemGiris::class, 'cari_id');
}
Controller içinde de,
public function store(Request $request)
{
$musteri = User::findOrFail($request->input('cari_id'));
$yemGirisVeri = $request->only([
'toplam_tutar',
'odenen_tutar',
'kalan_tutar',
'tarih',
'aciklama'
]);
$yemGirisHareketVerileri = [];
foreach ($request->input('yem_id') as $yemId => $deger) {
$yemGirisHareketVerileri[] = [
'yem_id' => $yemId,
'miktar' => $request->input("miktar.{$yemId}"),
'birim_fiyat' => $request->input("birim_fiyat.{$yemId}"),
];
}
// Art arda yapılan insert, update ve delete işlemleri transaction içinde yapılır.
// Böylece birinde hata olursa tüm işlem otomatik geri alınır, veri tabanında
// artık, sahipsiz veri oluşmaz.
// https://laravel.com/docs/9.x/database#database-transactions
try {
DB::beginTransaction();
$yemGiris = $musteri->yemGirisleri()
->create($yemGirisVeri);
if($yemGirisHareketVerileri) {
$yemGiris->yemGirisHareketleri()
->createMany($yemGirisHareketVerileri);
}
DB::commit();
return to_route('yem.giris.index')->with([
'status_color' => 'success',
'flash_message' => __('Veriler kaydedildi!'),
]);
} catch (Throwable $exception) {
DB::rollBack();
return back()->with([
'status_color' => 'danger',
'flash_message' => __('Bir hata oluştu! :exception', [
'exception' => $exception->getMessage(),
]),
]);
}
}
Türkçe kod yazarak hiçbir yere varamazsınız. Bu işi meslek olarak yapacaksanız İngilizce şart.
Dokümanlara bakmadan hareket ediyorsunuz. O yüzden Laravel özelliklerini kullanmıyorsunuz ve/veya yanlış/eksik kullanıyorsunuz.
<?php $row = 1; ?>
Bunu nereden gördünüz bilmiyorum ama bu kullanım kesinlikle yanlış. İlla Blade içinde değişken tanımlayacağım diyorsanız @php($row=1)
yapabilirsiniz. Blade dosyasında php tagı kullanılmaz. Mümkün olduğunca da değişken tanımlamayın. Blade view katmanı, onun görevi sadece göstermek iş yapmak değil.
Blade dosyasında DB::table() ile sorgu yapmışsınız. Blade dosyasında sorgu yapılmaz. Üstelik sorguyu da foreach içinde yapmışsınız, iterasyon içinde sorgu yapılmaz.
$request->yem_id yerine daima $request->input('yem_id') kullanın. Forumda sebebini anlattım:
https://laravel.gen.tr/d/7044-request-kullanim-sekli/2
TurkMvc Anladım hocam forum kurallarına alışırım sorun degil
rahatsız olduysanız da ayrıca özür dilerim.
Benim değil sizin rahatsız olmanız lazım. Yazılımcıda biraz kaygı olmalı ki bir şeylerin peşine düşsün, peşini bırakmasın, böylece öğrensin. Bir benim konuları yanıtlama şeklime bakın bir de sizinkine. Hangisini tercih edersiniz? Ne yaptığınızı anlamak için önce kodunuzu editöre alıp formatlamak zorunda kalıyoruz. Elimizden geldiğince yardımcı olmaya çalışıyoruz, en azında bu yükü bize bırakmayın. Amacımız kimseye burada yöneticilik patronluk taslamak değil, maksat forum temiz kalsın, herkes temiz temiz faydalansın 🙂