Saya mempunyai 4 jadual MySQL, menggunakan PHP dan Laravel 7
Sekarang saya ingin memaparkan bayaran tunggal setiap ahli dan semua potongan lain secara berterusan. (Andaikan seorang hanya mempunyai satu bayaran)
Struktur pangkalan data adalah seperti berikut
Ini adalah jadual HTML yang saya ingin paparkan
Ini adalah pertanyaan yang saya gunakan, tetapi ia menduplikasi data.
$payments = Payment::leftJoin('members', 'payments.member_id', '=', 'members.id') ->leftJoin('payment_deductions', 'payments.id', '=', 'payment_deductions.payment_id') ->leftJoin('deductions', 'payment_deductions.deduction_id', '=', 'deductions.id') ->select( 'members.*', 'payment_deductions.*', ) ->orderBy("member_id", "ASC") ->get()->toArray();
Tatasusunan yang terhasil mengulangi setiap ahli berdasarkan terbitannya.
Adakah terdapat cara untuk mendapatkan data ini dengan lebih baik? Sesuatu seperti susunan potongan bersarang untuk setiap ahli?
Inilah modelnya
Ahli
namespace App; use IlluminateDatabaseEloquentModel; use CarbonCarbon; class Member extends Model { protected $fillable = [ 'full_name', 'email', 'created_by', ]; }
Bayaran
namespace App; use IlluminateDatabaseEloquentModel; class Payment extends Model { protected $fillable = [ 'member_id', 'total_amount', 'payable_amount', 'created_by', ]; public function deductions() { return $this->belongsToMany(Deduction::class,'payment_deductions')->withTimestamps(); } }
Potongan
namespace App; use IlluminateDatabaseEloquentModel; class Deduction extends Model { protected $fillable = [ 'title', 'priority', 'created_by', ]; }
Anda sangat rapat dan berada di landasan yang betul semasa membina model, apa yang anda hilang ialah cara memuatkan perhubungan tanpa membuat pertanyaan lain, jika anda melihat pengawal anda akan melihat cara standard memuatkan perhubungan di dalamnya. Semoga ini adalah konsep yang lebih baik untuk menangani kebimbangan anda.
Untuk rujukan: https://laravel.com/docs/9.x/eloquent-relationships#lazy-eager-loading
Melakukan ini juga akan mengelakkan masalah
N+1
akan datang, lihat Apakah "masalah pemilihan N+1" dalam ORM (Pemetaan Hubungan Objek)?N+1
问题,请参阅什么是 ORM(对象关系映射)中的“N+1 选择问题”? 有关N+1
Butiran tentangN+1
Model Ahli
Mod Pembayaran
Model potongan
Pengawal Ahli: