Rumah rangka kerja php ThinkPHP apa itu orm dalam thinkphp

apa itu orm dalam thinkphp

Feb 14, 2022 pm 05:04 PM
orm thinkphp

Dalam thinkphp, ORM merujuk kepada "pemetaan hubungan objek", iaitu lapisan akses storan untuk memudahkan pembangun menggunakan pembangunan pangkalan data, tujuan utama ORM adalah untuk memetakan objek yang diwakili oleh model objek kepada berasaskan SQL; struktur pangkalan data model hubungan.

apa itu orm dalam thinkphp

Persekitaran pengendalian tutorial ini: sistem Windows 7, versi thinkphp v5.1, komputer Dell G3.

orm in thinkphp

Nama penuh ORM ialah Object Relational Mapping, iaitu, object relational mapping

  • Objek (Objek) ialah entiti dalam projek Untuk lebih tepat, ia ialah Model data, yang juga boleh dikatakan sebagai kelas kegigihan.

  • Data hubungan R (Perhubungan)

  • Pemetaan M (Pemetaan), memetakan objek kepada data hubungan, memetakan data hubungan kepada proses objek.

Pemahaman yang lebih intuitif ialah ORM menggunakan pemikiran OOP untuk menjana tambah, memadam, mengubah suai dan menanyakan pernyataan SQL.

ORM ThinkPHP ialah lapisan akses storan yang dibangunkan untuk memudahkan pembangun menggunakan pangkalan data Gambar reka bentuk rangka kerja adalah seperti berikut:

apa itu orm dalam thinkphp

Tujuan utamanya ialah: untuk. menukar model objek Objek yang diwakili dipetakan kepada struktur pangkalan data model hubungan berasaskan SQL.

Apabila menukar sifat objek itu sendiri atau memanggil kaedah objek, pelaksanaan yang sepadan bagi pernyataan SQL tertentu ialah.

Dengan cara ini, orang yang menulis kod boleh menulis logik perniagaan dengan lebih baik daripada menulis berulang kali tambah, padam, ubah suai dan pertanyaan pernyataan SQL.

Contoh aplikasi dalam thinkphp

Terdapat dua modul untuk operasi pangkalan data dalam rangka kerja TP:

  • Pangkalan Data

  • Model

Modul pangkalan data dalam tp

Petikan ciri-ciri dokumen Penerangan

Split ke Sambungan/Permintaan/Builder (SQL Generator)

  • Penyambung sambungan Utama ia digunakan untuk menyambung ke pangkalan data. pemacu untuk menyambung ke pelbagai jenis pangkalan data.

  • Pertanyaan pertanyaan digunakan untuk menjalankan pernyataan sql, memproses keputusan dan memetakannya ke set data.

  • Penjana pembina digunakan untuk menukar keadaan, pengisihan, dsb. yang kita masukkan ke dalam pernyataan sql.

Dalam 3 langkah ini, kita boleh tahu bahawa jika terdapat pemetaan abstrak idea ORM, ia hanya boleh menjadi modul Pertanyaan pertanyaan, tetapi kita boleh menyemak dokumen TP secara terperinci Penerangan daripada set data.

Ia lebih kepada merangkum dan menyediakan kaedah untuk memproses data, seperti:

(Berikut adalah sebahagian kecil yang disalin daripada dokumen)

toArray     将数据集的数据转为数组
merge   合并其它数据
diff    比较数组,返回差集
flip    交换数据中的键和值
intersect   比较数组,返回交集
keys    返回数据中的所有键名
pop 删除数据中的最后一个元素
shift   删除数据中的第一个元素
unshift 在数据开头插入一个元素
reduce  通过使用用户自定义函数,以字符串返回数组
Salin selepas log masuk

Tetapi ia adalah Tiada operasi perhubungan yang menyediakan pemetaan terbalik Sebagai contoh, kami mengendalikan set data dan mengemas kini data dalam pangkalan data secara automatik.

Jadi pada pemahaman saya, tidak banyak idea ORM dalam modul pangkalan data Fokus masih untuk memahami dan menggunakan model

Model dalam tp <🎜. >

Tentukan fail model

namespace app\index\model;

use think\Model;

// 设置类名 需要遵循转换规则,蛇形转为大驼峰
class User extends Model
{
    // 设置主键字段名
    protected $pk = &#39;u_id&#39;;

    // 开启自动维护时间戳字段 (什么时间插入 什么时间更新)
    protected $autoWriteTimestamp = true;

    // 软删除 开启之后 删除数据只是用一个字段来标识为删除状态 方便查询、备份等
    use SoftDelete;
    protected $deleteTime = &#39;delete_time&#39;;

}
Salin selepas log masuk
Kod di atas mempunyai lebih banyak kandungan daripada permulaan model dalam bab pertama dokumen Ini adalah untuk menyerlahkan bahawa model boleh melengkapkan banyak fungsi

Ini juga kemunculan ORM Sebabnya: memetakan secara abstrak pelaksanaan SQL kepada objek dalam pengaturcaraan berorientasikan objek.

Kami boleh memahaminya sebagai: satu baris data dalam jadual mewakili objek baharu dalam kod kami Jika objek itu ditukar, baris yang sepadan dalam jadual akan dikemas kini secara automatik.

Gunakan model

Kod yang ditunjukkan agak mudah, tetapi sebenarnya ia boleh menjadi sangat fleksibel

Sebagai contoh, pertanyaan menggunakan kunci bukan utama syarat, Menyoal rekod berbilang baris, dsb.

<?php
// *******快速查询、更新*******
// 查询主键=1的数据
$user = User::get(1);
// 然后更改它的name字段为新的值
$user->name = &#39;thinkphp&#39;;
// 保存,自己去数据库给我更新吧~
$user->save();

// *******插入新的一行数据*******
// 新建一个对象(相对应的操作就是新创建一行)
$user = new User;
// 设置字段的值  有多个字段就多个设置
$user->name= &#39;thinkphp&#39;;
// 保存,自己去插入吧~
$user->save();
Salin selepas log masuk

Salah Faham

Selepas melihat cara menggunakannya, ramai pemula mula menulis kod, tetapi mereka menggunakan salah satu-satu.

① Model hanya boleh digunakan sebagai kelas Db

Walaupun model itu boleh dianggap sebagai superset kelas db, jika anda hanya menggunakannya sebagai kelas DB yang ringkas, bukannya menggunakan idea ORM untuk menulisnya . Kemudian tidak perlu menggunakannya. .

Jika anda salah menggunakannya, bukan sahaja anda tidak akan dapat meningkatkan kecekapan anda, malah ia sebenarnya akan menjejaskan anda. (Sebagai contoh, spesifikasi kod tidak disatukan, jadual baharu perlu ditambah dengan fail model yang sepadan, dsb.)

Demonstrasi kod:

<?php
$userModel = new User(); // 这里就相当于初始化Db类
$userOneInfo = $userModel->where([&#39;u_id&#39; => 1])->find();

$userTwoInfo = $userModel->where([&#39;u_id&#39; => 2])->find();
// ... 执行其他逻辑 比如判断上下级 操作权限等等

// 业务需求不只是读取用户的数据这么简单
// 还要扣除余额(就是更新数据库)
$userOneRes = $userModel->where([&#39;u_id&#39; => 1])->update([&#39;u_balance&#39; => &#39;xxxx&#39;]);

// ... 执行其他逻辑
Salin selepas log masuk
Apabila anda melihat ini, berhenti dan fikirkan mengenainya. . Adakah kod anda pernah kelihatan seperti ini?

Saya percaya sesetengah orang masih menggunakannya seperti ini! Sebab saya pernah guna cara ni.

Kemudian mari kita lihat cara penggunaan yang betul (pada pendapat saya, jika anda rasa ia salah atau ada yang lebih baik, sila komen dan bertukar)

<?php

$userOneInfo = User::get(1);

// 这里演示使用非主键条件查询的情况!!
// 查询一个1用户的下级出来
$userTwoInfo = User::get(function($query){
    $query->where([&#39;p_uid&#39; => 1]);
});

// ... 执行其他逻辑 比如判断上下级 操作权限等等

// 业务需求不只是读取用户的数据这么简单
// 还要扣除余额(就是更新数据库)
$userOneInfo->u_balance = 0;
$userOneRes = $userOneInfo->save();

$userTwoInfo->u_balance = 0;
$userTwoRes =  $userTwoInfo->save();

// ... 执行其他逻辑
Salin selepas log masuk
Kerana objek memetakan sekeping data, jadi kami Apabila mengendalikan data dengan keadaan yang sama di mana, hanya mengendalikan objek secara langsung. Tidak perlu berulang kali menulis di mana u_id =1 kemas kini, u_id = 1 untuk memadam model penggunaan

, terdapat banyak kegunaan, (berkat dedikasi pasukan sumber terbuka, yang telah merangkumi banyak berfungsi untuk kita)

Contohnya:

– Apabila sekeping data baharu ditambahkan pada jadual pengguna, jadual subsidiari lain juga mesti memulakan baris dengan ID pengguna.

– Tukar format data secara automatik (simpan cap masa dan pertanyaan akan berada dalam format 13-7-2019 19:53:04).

– Sahkan data secara automatik dan lengkapkan data secara automatik (kebenaran IP pengendali, dll. disimpan secara lalai semasa operasi).

– Pertanyaan berkaitan (fungsi yang sangat berkuasa dalam TP. Hubungan dengan model lain ditakrifkan dalam model. Contohnya, u_id dalam jadual stor boleh digunakan untuk menanyakan maklumat pengguna yang dimiliki kedai. Ia bersamaan dengan model kedai dan Persatuan model pengguna Sertai gabungan data secara automatik dan kembali kepada kami)

– dsb.

Ringkasan

ORM ialah idea dan konsep yang mewakili pemetaan hubungan objek (pemetaan pangkalan data-objek) ORM mengabstrakkan operasi pada data kepada operasi pada objek. Belajar untuk mengubah pemikiran anda, gunakan ciri yang disediakan oleh rangka kerja dengan baik dan tulis kod yang lebih baik. Model dalam TP sangat berkuasa dan merangkumi banyak logik.

[Cadangan tutorial berkaitan: rangka kerja thinkphp]

Atas ialah kandungan terperinci apa itu orm dalam thinkphp. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1671
14
Tutorial PHP
1276
29
Tutorial C#
1256
24
Bagaimana untuk menjalankan projek thinkphp Bagaimana untuk menjalankan projek thinkphp Apr 09, 2024 pm 05:33 PM

Untuk menjalankan projek ThinkPHP, anda perlu: memasang Komposer untuk mencipta projek, masukkan direktori projek dan laksanakan php bin/console serve;

Terdapat beberapa versi thinkphp Terdapat beberapa versi thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP mempunyai berbilang versi yang direka untuk versi PHP yang berbeza. Versi utama termasuk 3.2, 5.0, 5.1 dan 6.0, manakala versi kecil digunakan untuk membetulkan pepijat dan menyediakan ciri baharu. Versi stabil terkini ialah ThinkPHP 6.0.16. Apabila memilih versi, pertimbangkan versi PHP, keperluan ciri dan sokongan komuniti. Adalah disyorkan untuk menggunakan versi stabil terkini untuk prestasi dan sokongan terbaik.

Bagaimana untuk menjalankan thinkphp Bagaimana untuk menjalankan thinkphp Apr 09, 2024 pm 05:39 PM

Langkah-langkah untuk menjalankan ThinkPHP Framework secara setempat: Muat turun dan nyahzip ThinkPHP Framework ke direktori tempatan. Buat hos maya (pilihan) yang menunjuk ke direktori akar ThinkPHP. Konfigurasikan parameter sambungan pangkalan data. Mulakan pelayan web. Mulakan aplikasi ThinkPHP. Akses URL aplikasi ThinkPHP dan jalankannya.

Bagaimana untuk menggunakan pemetaan hubungan objek (ORM) dalam PHP untuk memudahkan operasi pangkalan data? Bagaimana untuk menggunakan pemetaan hubungan objek (ORM) dalam PHP untuk memudahkan operasi pangkalan data? May 07, 2024 am 08:39 AM

Operasi pangkalan data dalam PHP dipermudahkan menggunakan ORM, yang memetakan objek ke dalam pangkalan data hubungan. EloquentORM dalam Laravel membolehkan anda berinteraksi dengan pangkalan data menggunakan sintaks berorientasikan objek Anda boleh menggunakan ORM dengan mentakrifkan kelas model, menggunakan kaedah Eloquent atau membina sistem blog dalam amalan.

Mana yang lebih baik, laravel atau thinkphp? Mana yang lebih baik, laravel atau thinkphp? Apr 09, 2024 pm 03:18 PM

Perbandingan prestasi rangka kerja Laravel dan ThinkPHP: ThinkPHP umumnya berprestasi lebih baik daripada Laravel, memfokuskan pada pengoptimuman dan caching. Laravel berfungsi dengan baik, tetapi untuk aplikasi yang kompleks, ThinkPHP mungkin lebih sesuai.

Bagaimana untuk memasang thinkphp Bagaimana untuk memasang thinkphp Apr 09, 2024 pm 05:42 PM

Langkah pemasangan ThinkPHP: Sediakan persekitaran PHP, Komposer dan MySQL. Buat projek menggunakan Komposer. Pasang rangka kerja dan kebergantungan ThinkPHP. Konfigurasikan sambungan pangkalan data. Hasilkan kod aplikasi. Lancarkan aplikasi dan lawati http://localhost:8000.

Bagaimanakah prestasi thinkphp? Bagaimanakah prestasi thinkphp? Apr 09, 2024 pm 05:24 PM

ThinkPHP ialah rangka kerja PHP berprestasi tinggi dengan kelebihan seperti mekanisme caching, pengoptimuman kod, pemprosesan selari dan pengoptimuman pangkalan data. Ujian prestasi rasmi menunjukkan bahawa ia boleh mengendalikan lebih daripada 10,000 permintaan sesaat, dan digunakan secara meluas dalam tapak web dan sistem perusahaan berskala besar seperti JD.com dan Ctrip dalam aplikasi praktikal.

Bagaimanakah Hibernate melaksanakan pemetaan polimorfik? Bagaimanakah Hibernate melaksanakan pemetaan polimorfik? Apr 17, 2024 pm 12:09 PM

Pemetaan polimorfik hibernate boleh memetakan kelas yang diwarisi ke pangkalan data dan menyediakan jenis pemetaan berikut: subkelas bercantum: Cipta jadual berasingan untuk subkelas, termasuk semua lajur kelas induk. table-per-class: Cipta jadual berasingan untuk subkelas, yang mengandungi hanya lajur khusus subkelas. union-subclass: serupa dengan joined-subclass, tetapi jadual kelas induk menggabungkan semua lajur subclass.

See all articles