Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?
  • YardımLaravel
  • Ödeme Toplamlarını Nasıl Toplayabilirim ve sayfada göstermem gerekiyor.

Merhabalar yine ben kusura bakmayın sürekli bu aralar kafanızı ütülüyorum hakkınızı helal ediniz. lütfen
bir sorum olacaktı
ben index fonksiyonuma verileri
$data['alldata'] = YemGiris::orderBy('id','asc')->get();
bu şekilde gönderiyorum ama benim yapmak istedigim şu aslında

{
"alldata": [
{
"id": 135,
"cari_id": 1,
"toplam_tutar": "8000.00",
"tarih": "01/01/2023",
"aciklama": "Açıklama",
"created_at": "2023-01-25 18:37:11",
"updated_at": "2023-01-25 18:37:11"
}
],
"odemedata": [
{
"id": 13,
"giris_id": 135,
"tarih": "01/01/2023",
"odenen_tutar": "6500.00",
"created_at": "2023-01-25 18:37:11",
"updated_at": "2023-01-25 18:37:11"
}
]
}

kodum şu şekilde index fonksiyonumda

$data['alldata'] = YemGiris::orderBy('id','asc')->get();
        $data['odemedata'] = YemGirisIslem::orderBy('id', 'asc')->get();
        return $data;
        return view('yem.giris.index', $data);

bu şekilde dizi olarak geliyor bu tek bir ödeme oldugu için farz edelim 15 tane giris_id si 1135 olan olacak ileride ben bunların toplamını alıp örnegin giris_id si 135 olanlar toplamda 7555 oluyorsa ben bunu göstermek istiyorum nasıl yapabilirim ve
örnek olacak ama
toplam_tutar 1000 tl ise ve ödeme toplamı 1000 tl ise ben ödeme ekranı butonunu göstermek istemiyorum bunun için nasıl bir kod yazmalıyım ?
örnek olması açısından
<a href="{{ route('yem.giris.edit', $data->id) }}" class="btn btn-outline-warning"><i class="fas fa-edit"></i></a>
Modellerimde ilişki kurdum Tabiki @mgsmus hocamın söyledigi gibi
şimdiden çok teşekkür ederim

  • mgsmus bunu yanıtladı.
  • TurkMvc Giriş işlemleri tablosundan yola çıkıp sum alıp yem girişleri tablosuna join atıp having kullanarak bir grup listesi oluşturmanız lazım ama bunun için iyi SQL bilmeniz lazım. Size şöyle bir şey önerebilirim (bu daha performanslı ve kolay sorgular yazabilmek için bilinen bir tekniktir ama bakımı duruma göre daha zor olabilir)

    Yem girişleri tablonuza toplam_odenen_tutar şeklinde bir alan ekleyin. Her bir YemGirisIslem oluşturulduktan sonra ana YemGiris modelindeki toplam_odenen_tutar alanını YemGirisIslem toplamı ile güncelleyin. Mesela:

    $yemGiris = YemGiris::find($id);
    
    $yemGiris->yemGirisIslemleri()
        ->create([
            'tarih' => $request->input('tarih'),
            'odenen_tutar' => $request->input('odenen_tutar'),
        ]);
    
    $yemGiris->update([
        'toplam_odenen_tutar' => $yemGiris->yemGirisIslemleri()
            ->sum('odenen_tutar'),
    ]);

    Böylece artık tümü ödenmiş yem girişlerini daha basit bir şekilde bulabilirsiniz:

    $odenmisYemGirisleri = YemGiris::whereColumn('toplam_tutar', 'toplam_odenen_tutar')
        ->get();
    
    $odemeBekleyenYemGirisleri = YemGiris::whereColumn('toplam_tutar', '<>', 'toplam_odenen_tutar')
        ->get();

    Veri de şöyle olacak:

    [
      {
        "id": 135,
        "cari_id": 1,
        "toplam_tutar": "8000.00",
        "odenen_toplam_tutar": "6000.00",
        "tarih": "01/01/2023",
        "aciklama": "Açıklama",
        "created_at": "2023-01-25 18:37:11",
        "updated_at": "2023-01-25 18:37:11"
      },
      {
        "id": 136,
        "cari_id": 2,
        "toplam_tutar": "5000.00",
        "odenen_toplam_tutar": "5000.00",
        "tarih": "01/01/2023",
        "aciklama": "Açıklama",
        "created_at": "2023-01-25 18:37:11",
        "updated_at": "2023-01-25 18:37:11"
      }
    ]

    Gördüğünüz gibi id 136 tamamen ödenmiş ama 135'in 2000 ödemesi daha var...

    • mgsmus

      Seviye 1382
    • Düzenlendi
    • En İyi YanıtTurkMvc tarafından

    TurkMvc Giriş işlemleri tablosundan yola çıkıp sum alıp yem girişleri tablosuna join atıp having kullanarak bir grup listesi oluşturmanız lazım ama bunun için iyi SQL bilmeniz lazım. Size şöyle bir şey önerebilirim (bu daha performanslı ve kolay sorgular yazabilmek için bilinen bir tekniktir ama bakımı duruma göre daha zor olabilir)

    Yem girişleri tablonuza toplam_odenen_tutar şeklinde bir alan ekleyin. Her bir YemGirisIslem oluşturulduktan sonra ana YemGiris modelindeki toplam_odenen_tutar alanını YemGirisIslem toplamı ile güncelleyin. Mesela:

    $yemGiris = YemGiris::find($id);
    
    $yemGiris->yemGirisIslemleri()
        ->create([
            'tarih' => $request->input('tarih'),
            'odenen_tutar' => $request->input('odenen_tutar'),
        ]);
    
    $yemGiris->update([
        'toplam_odenen_tutar' => $yemGiris->yemGirisIslemleri()
            ->sum('odenen_tutar'),
    ]);

    Böylece artık tümü ödenmiş yem girişlerini daha basit bir şekilde bulabilirsiniz:

    $odenmisYemGirisleri = YemGiris::whereColumn('toplam_tutar', 'toplam_odenen_tutar')
        ->get();
    
    $odemeBekleyenYemGirisleri = YemGiris::whereColumn('toplam_tutar', '<>', 'toplam_odenen_tutar')
        ->get();

    Veri de şöyle olacak:

    [
      {
        "id": 135,
        "cari_id": 1,
        "toplam_tutar": "8000.00",
        "odenen_toplam_tutar": "6000.00",
        "tarih": "01/01/2023",
        "aciklama": "Açıklama",
        "created_at": "2023-01-25 18:37:11",
        "updated_at": "2023-01-25 18:37:11"
      },
      {
        "id": 136,
        "cari_id": 2,
        "toplam_tutar": "5000.00",
        "odenen_toplam_tutar": "5000.00",
        "tarih": "01/01/2023",
        "aciklama": "Açıklama",
        "created_at": "2023-01-25 18:37:11",
        "updated_at": "2023-01-25 18:37:11"
      }
    ]

    Gördüğünüz gibi id 136 tamamen ödenmiş ama 135'in 2000 ödemesi daha var...

      mgsmus hocam şunu anladım söylediginizden yemgiris tabloda toplam tutar dışında birde ödenen tutar tutayım ve ödeme gerçekleştikçe ödenen alanını güncelleyeyim peki hocam Yem giriş dedigim aslında fatura oluyor ödeneklerin toplamını nasıl çekeceğim. Nasıl anlayacağım toplam ödenen tutarı

        mgsmus hocam ben onu kodla çözdüm nasıl çözdügüm kısmına gelir isek

        @if(isset($alldata) && count($alldata)>0)
                                        @foreach($alldata as $data)
                                            <tr>
                                                @php
                                                    $data['girisodeme'] = \App\Models\YemGirisIslem::where('giris_id', $data->id)->sum('odenen_tutar');
                                                    $kalan = $data->toplam_tutar - $data['girisodeme'];
                                                @endphp
                                                <th scope="row">{{  $data->id }}</th>
                                                <th scope="row">{{  $data->cari->name }}</th>
                                                <th scope="row">{{  number_format($data->toplam_tutar, 2) }} ₺</th>
                                                <th scope="row">{{  number_format($data['girisodeme'], 2) }} ₺</th>
                                                <th scope="row">{{  number_format($kalan, 2) }} ₺</th>
                                                <th scope="row">{{  date('m/d/Y', strtotime($data->created_at)) }}</th>
                                                <td>
                                                    <a href="{{ route('yem.giris.show', $data->id) }}" class="btn btn-outline-info">
                                                        <i class="far fa-eye"></i>
                                                    </a>
                                                    <!--<a href="{{ route('yem.giris.edit', $data->id) }}" class="btn btn-outline-warning">
                                                        <i class="fas fa-edit"></i>
                                                    </a>-->
                                                    <a href="{{ route('yem.giris.destroy', $data->id) }}" class="btn btn-outline-danger">
                                                        @csrf
                                                        <i class="fas fa-trash-alt"></i>
                                                    </a>
                                                </td>
                                            @endforeach
                                            </tr>
                                    @else
                                        <tr>
                                            <td colspan="7" align="center">Kayıt Bulunmuyor</td>
                                        </tr>
                                    @endif

        bu şekilde view dosyamda çözdüm kurcalayarak

        sonuç ise

        hatta stok yani giriş çıkışlarıda aradan çıkardım hocam 🙂