Saya telah mengerjakan aplikasi kereta belanja dan sekarang saya sampai pada masalah berikut ..
Ada pengguna, Produk, dan objek Keranjang.
- Tabel Keranjang hanya berisi kolom berikut: "id", "user_id", "product_id", dan cap waktu.
- Gerobak "hasMany" UserModel (karena pengguna dapat menyimpan banyak produk).
- Produk CartModel "milikTo" Pengguna dan CartModel "hasMany".
Sekarang untuk menghitung total produk saya hanya bisa menelepon: Auth::user()->cart()->count()
.
Pertanyaan saya adalah: Bagaimana saya bisa mendapatkan JUMLAH () dari harga (kolom produk) dari produk di keranjang oleh Pengguna ini?
Saya ingin menyelesaikan ini dengan Eloquent dan bukan dengan menggunakan kueri (terutama karena saya yakin ini jauh lebih bersih).
$sum = Auth::user()->cart()->products()->sum('price');
atau berapapun kolom harga yang ada di tabel produk Anda.products->sum
menyiratkan bahwa ini adalah panggilan jumlah pada objek koleksi, bukan pada objek pembuat yang dikembalikan oleh products (). Perlu diperjelas mana yang Anda maksud di sini, dan idealnya berikan tautan untuk menjelaskan keduanya....->products->...
akan meminta database untuk mendapatkan semua produk terkait model saat ini dan kemudian bekerja dengan koleksi dalam memori tersebut. Menggunakan...->products()->...
just memodifikasi kueri yang sedang dibangun tanpa menjalankannya sampai sesuatu seperti->sum()
dipanggil. Yang terakhir bisa lebih efisien, karena menghindari transfer informasi yang tidak perlu dari database ke dalam memori.ini bukan jawaban Anda tetapi untuk mereka yang datang ke sini mencari solusi untuk masalah lain. Saya ingin mendapatkan jumlah kolom tabel terkait secara kondisional. Dalam database saya Deals memiliki banyak Aktivitas, saya ingin mendapatkan jumlah "jumlah_total" dari tabel Aktivitas di mana aktivitas.deal_id = deal.id dan aktivitas.status = dibayar jadi saya melakukan ini.
itu kembali
di atribut Deals.
Ini sekarang jumlah yang ingin saya dapatkan bukan hitungan.
sumber
Saya mencoba melakukan hal serupa, yang membutuhkan banyak waktu sebelum saya dapat mengetahui fungsi collect (). Jadi Anda bisa mendapatkan sesuatu dengan cara ini:
collect($items)->sum('amount');
Ini akan memberi Anda jumlah total semua item.
sumber
collect()
collect()
digunakan untuk memperkaya array ke dalam objek koleksi, tetapi jika Anda tidak memiliki koleksi di tempat pertama, mungkin lebih baik menggunakan array mentahJuga menggunakan pembuat kueri
Untuk mendapatkan penjumlahan dari semua nilai tarif di dalam tabel tarif.
Untuk mendapatkan penjumlahan produk pengguna.
sumber