Rumah > rangka kerja php > ThinkPHP > teks badan

apa itu orm dalam thinkphp

青灯夜游
Lepaskan: 2022-02-14 17:04:06
asal
4252 orang telah melayarinya

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!

Label berkaitan:
sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan