Penjelasan yang terdapat di Internet adalah untuk memudahkan pertukaran pangkalan data dan mengelakkan penulisan SQL. Saya tidak memahami kedua-dua ini dengan baik.
Yang pertama, adakah menukar pangkalan data bermaksud sesuatu seperti menukar mysql kepada pelayan sql Walau bagaimanapun, selagi struktur jadual adalah sama, sql asli dan pembina pertanyaan tidak perlu untuk diubah.
Kedua, elakkan menulis SQL yang panjang, pembina pertanyaan juga boleh melakukan ini
Bagi perbezaan antara pembina pertanyaan dan ORM, pemahaman saya ialah pembina pertanyaan ialah kelas yang menjana SQL, manakala ORM ialah kelas yang memetakan ke jadual, dan medan dipetakan ke dalam pembolehubah ahli. Saya mempunyai soalan lain jika terdapat banyak jadual dan medan, bukankah kelas ORM akan menjadi sangat verbose? Tolong betulkan saya di mana pemahaman saya salah.
$user = DB::table('users')->where('name','Laravel')->first();//laravel query constructor
$posts = Post::where('id','<',3)->orderBy('id','desc')->take(1)->get();//laravel orm
Betul kata awak, kalau banyak table dan banyak field, maka kelas ORM akan jadi sangat verbose.
Intipati ORM adalah untuk memetakan jadual pangkalan data dan hubungan antara jadual dengan objek dan hubungan objek Perlu diingat bahawa walaupun hubungan pemetaan ini adalah dua arah, terdapat beberapa masalah dalam arah Objek->RDB Beberapa batasan, ini adalah. kerana perihalan entiti RDB tidak begitu kaya dengan perihalan entiti Object.
Penjelasan mengenai dua sebab yang anda sebutkan:
Adalah mudah untuk menukar pangkalan data Secara peribadi, saya berpendapat bahawa walaupun ORM menyediakan ciri sedemikian, ia tidak biasa kerana jarang menukar pangkalan data dalam projek sebenar.
Elakkan menulis SQL Ini adalah sebab penting untuk menggunakan ORM, kerana pengaturcara malas dan tidak mahu belajar SQL (walaupun SQL mudah dipelajari), dan ini juga merupakan sebab penting mengapa ORM dihasilkan pada asalnya.
Untuk memberikan jawapan yang mudah, ORM ialah singkatan daripada object Relational Mapping Object ialah objek, relational ialah hubungan, dan pemetaan ialah pemetaan. Pemetaan hubungan objek kelihatan agak abstrak, dan ya, ia adalah konsep abstrak. Dari perspektif sintaks pengaturcaraan, apabila secara khusus mengendalikan objek perniagaan, tidak perlu berurusan dengan pernyataan SQL yang kompleks, hanya operasi mudah pada sifat dan kaedah objek.
Kemudian jawab dua soalan anda
Pertama, terdapat banyak perbezaan antara mysql dan sqlserver Fungsi bermula dengan mysql_ yang anda gunakan dalam program tidak akan dikenali oleh sqlserver. Jadi bagaimana anda berhijrah tanpa menukar kod?
Kedua, ORM mengandungi perhubungan pemetaan berikut, bukan hanya pemetaan antara jadual dan kelas.
Pemetaan kelas dan jadual dalam pangkalan data: Setiap jadual dalam pangkalan data sepadan dengan kelas dalam bahasa pengaturcaraan
Pemetaan objek dan rekod dalam jadual: Jadual dalam pangkalan data hubungan mungkin mempunyai berbilang rekod dan setiap rekod sepadan dengan kejadian kelas
Pemetaan antara atribut kelas dan medan jadual dalam pangkalan data: jenis data medan jadual dalam pangkalan data dan jenis atribut dalam kelas juga sepadan satu-dengan-satu