在thinkphp中,ORM指的是“物件關聯映射”,是為方便開發者使用資料庫開發的一個儲存存取層;ORM的主要用途是把物件模型表示的物件映射到基於sql的關係模型資料庫結構中去。
本教學操作環境:Windows7系統、thinkphp v5.1版、Dell G3電腦。
thinkphp中的orm
ORM的全名為Object Relational Mapping,也就是物件關係對應
#O(Object) 對象,在專案中就是實體,更精確的來說就是資料Model,也可以說持久化類別。
R(Relation) 關聯式資料
M (Mapping)映射,將物件映射到關聯數據,將關係資料映射到物件的過程。
更直覺理解就是,ORM 就是以OOP思想,產生增刪改查SQL語句。
ThinkPHP的ORM是為方便開發者使用資料庫開發的一個儲存存取層,框架設計圖片如下:
主要用途是:把物件模型表示的物件映射到基於sql的關係模型資料庫結構中去。
當改變這個物件本身的屬性或呼叫該物件的方法時,相對應的是執行某些sql語句。
這樣子寫程式碼的人員就可以更好地寫業務邏輯,而不是重複地寫增刪改查sql語句。
thinkphp中的運用範例
TP框架中關於資料庫操作有兩個模組:
資料庫
模型
#tp中的資料庫模組
引用一句文件的特性描述
拆分為Connection(連接器)/Query(查詢器)/Builder(SQL產生器)
toArray 将数据集的数据转为数组 merge 合并其它数据 diff 比较数组,返回差集 flip 交换数据中的键和值 intersect 比较数组,返回交集 keys 返回数据中的所有键名 pop 删除数据中的最后一个元素 shift 删除数据中的第一个元素 unshift 在数据开头插入一个元素 reduce 通过使用用户自定义函数,以字符串返回数组
tp中的模型
#定義模型檔案namespace app\index\model; use think\Model; // 设置类名 需要遵循转换规则,蛇形转为大驼峰 class User extends Model { // 设置主键字段名 protected $pk = 'u_id'; // 开启自动维护时间戳字段 (什么时间插入 什么时间更新) protected $autoWriteTimestamp = true; // 软删除 开启之后 删除数据只是用一个字段来标识为删除状态 方便查询、备份等 use SoftDelete; protected $deleteTime = 'delete_time'; }
使用模型
示範的程式碼是比較簡單的,實際上是可以很靈活的例如查詢用非主鍵的條件來查詢、查詢多行記錄等等<?php // *******快速查询、更新******* // 查询主键=1的数据 $user = User::get(1); // 然后更改它的name字段为新的值 $user->name = 'thinkphp'; // 保存,自己去数据库给我更新吧~ $user->save(); // *******插入新的一行数据******* // 新建一个对象(相对应的操作就是新创建一行) $user = new User; // 设置字段的值 有多个字段就多个设置 $user->name= 'thinkphp'; // 保存,自己去插入吧~ $user->save();
誤解
看了使用之後,很多初學者就開始寫程式碼了,然而卻使用了不太正確的方式。 ① model只當為Db類別用雖然model可以看成db類別的超集,但是如果只是把它當成簡單的DB類別使用,而不是使用ORM思想去編寫。那就沒什麼必要使用它了。 。 如果使用不對,不但不能提高效率,反而會影響自己。 (例如程式碼規格不統一、新增表格還要新增對應的模型檔案等等)程式碼示範:<?php $userModel = new User(); // 这里就相当于初始化Db类 $userOneInfo = $userModel->where(['u_id' => 1])->find(); $userTwoInfo = $userModel->where(['u_id' => 2])->find(); // ... 执行其他逻辑 比如判断上下级 操作权限等等 // 业务需求不只是读取用户的数据这么简单 // 还要扣除余额(就是更新数据库) $userOneRes = $userModel->where(['u_id' => 1])->update(['u_balance' => 'xxxx']); // ... 执行其他逻辑
<?php $userOneInfo = User::get(1); // 这里演示使用非主键条件查询的情况!! // 查询一个1用户的下级出来 $userTwoInfo = User::get(function($query){ $query->where(['p_uid' => 1]); }); // ... 执行其他逻辑 比如判断上下级 操作权限等等 // 业务需求不只是读取用户的数据这么简单 // 还要扣除余额(就是更新数据库) $userOneInfo->u_balance = 0; $userOneRes = $userOneInfo->save(); $userTwoInfo->u_balance = 0; $userTwoRes = $userTwoInfo->save(); // ... 执行其他逻辑
– 使用者表新增一條數據,另一個附屬表也要用該用戶id初始化一行。
– 自動轉換資料格式(儲存時間戳,查詢出來為2019-7-13 19:53:04格式)。
– 自動校驗數據,自動完成數據(操作的時候預設取操作人ip 權限等儲存)。
– 關聯查詢(TP中非常強大的功能,在模型中定義好與另一個模型的關係,例如店鋪表中的u_id 可以用來查詢出店舖所屬用戶的資訊 相當於店鋪模型和使用者模型的關聯 自動join資料合併回給我們使用)
# – 等等
總結
ORM是一種思想,概念,代表物件-關聯映射(資料庫-物件映射)ORM使得資料的操作抽象化為對物件的操作。要學會思想的改變,利用好框架提供的特性,寫出更好地程式碼。 TP中的模型非常強大,封裝了大量的邏輯。
【相關教學推薦:thinkphp框架】
以上是thinkphp中什麼是orm的詳細內容。更多資訊請關注PHP中文網其他相關文章!