ThinkPHP5的資料庫和模型用法
1,TP5的資料庫架構
Db: 是TP5操作資料庫的入口類。它的作用是為連線資料庫做準備,我們只需要在database.php裡填寫相應的配置即可。
Connection: 是TP5的聯結器類,因為TP5支援四種資料庫(Mysql,Pgsql,Sqlite,Sqlsrv),所以TP5封裝了一個類來提供統一的呼叫介面來支援我們連線資料庫(這裡的連線是惰性連線,只有在執行SQL的時候才會真正連線)。
Query: 查詢器,因為不同資料庫的SQL語句不同,所以封裝了一個Query類來提供統一的介面,以實現不同資料庫的CURD操作。查詢器是TP5資料訪問層的核心,它連線了Connection和Builder。
Builder: 生成器。這個類主要是把Query的查詢引數生成相應的sql語句,然後把其返回給Connection供其使用。
2, 資料庫的訪問
在TP5中,對於資料庫的訪問有三種方法:
- 原生sql語句。
Db::query('select * from think_user where id=?',[8]);
Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);
- 查詢構造器
需要注意的是,上述的查詢方法中find,select,insert,update,delete都是查詢操作,其他的都是輔助操作,輔助操作返回的是個物件,支援鏈式呼叫。但一旦執行了查詢操作,就不能繼續呼叫了。
不同的輔助操作先後順序沒影響,但是相同的輔助操作先後順序會有影響。
不同的輔助操作,先後順序沒影響。
Db::table('banner')->where('id', '>', '2')->order('update_time asc')->select();
Db::table('banner')->order('update_time asc')->where('id', '>', '2')->select();
相同的查詢操作,先後順序有影響。
$list = Db::table('data')
->where('id' , '>', 1)
->where('name', 'like', '%think%')
->order('id', 'desc')
->order('create_time', 'desc')
->limit(8)
->select();
$list = Db::table('data')
->where('name', 'like', '%think%')
->where('id', '>', 1)
->order('create_time', 'desc')
->order('id', 'desc')
->limit(8)
->select();
- 模型
ORM Object Relation Mapping 物件關係對映
就是通過模型來對映到我們的資料庫中的表,然後通過操作模型來操作資料庫。
我們通過和查詢構造器對比來看
// 查詢操作
$user = Db::table('user')->find(1);
// 取值操作
echo $user['name'];
echo $user['email'];
// 設定操作
$user['name'] = 'topthink';
$user['email'] = '[email protected]';
// 更新操作
Db::table('user')->update($user);
如果是模型操作的話,就可以對應下面的程式碼實現
// 查詢操作
$user = User::get(1);
// 取值操作
echo $user->name;
echo $user->email;
// 設定操作
$user->name = 'topthink';
$user->email = '[email protected]';
// 更新操作
$user->save();
這裡是在模型的外部,也就是控制器裡的取值和設定操作,但是在模型內部,是使用如下方式:
// 取值操作
echo $user->getData('name');
echo $user->getData('email');
// 設定操作
echo $user->data('name', 'SpawN');
echo $user->data('email', '[email protected]');
模型的CURD操作
建立
Db 用法:
Db::table('user')->insert([
'name' => 'spawn',
'email' => '[email protected]'
])
模型用法:
$user = new User;
$user->save([
'name' => 'spawn',
'email' => '[email protected]'
])
$user = User::create([
'name' => 'sapwn',
'email' => '[email protected]'
])
總結:
- save(動態) 返回: 影響的記錄數
- create(靜態) 返回:模型物件例項 (可以直接呼叫方法)
讀取
Db :
$user = Db::table('user')->where('id', 1)->find();
模型:
$user = User::get(1);
需要注意的是,find和select是查詢構造器的方法,get和all是模型的方法。但模型又是基於查詢構造器的,所以模型可以呼叫find和select方法,但是查詢構造器不能呼叫get和all方法
總結:
方法 作用 返回值
get 查詢單個記錄 模型物件例項
find 查詢單個記錄 模型物件例項
all 根據主鍵查詢多個記錄 包含模型物件例項的陣列或者資料集
select 根據條件查詢多個記錄 包含模型物件例項的陣列或者資料集
更新
Db :
Db::table('user')->where('id', 1)->update([
'name' => 'haha',
'email' => '[email protected]'
])
模型:
$user = User::get(1);
$user->save([
'name' => 'haha',
'email' => '[email protected]'
])
或者
User::update([
'name' => 'topthink',
'email' => '[email protected]',
], ['id' => 1]);
總結:
方法 作用 返回值
save 更新資料 影響的記錄數
update 更新資料(靜態) 返回模型物件例項
需要注意的是,模型的更新操作是隻更新有變化的資料。效能比較好。
刪除
Db:
Db::table('user')->delete(1);
模型:
$user = User::get(1);
$user->delete();
或者
User::destory(1);
總結:
方法 作用 返回值
delete 刪除當前資料 影響的記錄數
destroy 刪除指定資料(靜態) 影響的記錄數
現在我們已經掌握了模型的基本CURD操作,我們來總結下方法區別:
用法 Db類 模型(動態) 模型(靜態)
建立 insert save create
更新 update save update
讀取單個 find find get
讀取多個 select select all
刪除 delete delete destroy
相關推薦
ThinkPHP5的資料庫和模型用法
1,TP5的資料庫架構 Db: 是TP5操作資料庫的入口類。它的作用是為連線資料庫做準備,我們只需要在database.php裡填寫相應的配置即可。 Connection: 是TP5的聯結器類,因為TP5支援四種資料庫(Mysql,Pgsql,Sqli
thinkphp5 資料庫和模型詳解 之2 查詢構造器及高階技巧
1、掌握查詢構造器對於掌握資料庫和模型的查詢操作非常關鍵 2、使用查詢構造器一般都是自動例項化查詢類,Db類的任何方法都會自動呼叫connect方法返回連線物件例項,然後呼叫連線物件的查詢構造器方法會自動例項化查詢類。 3、db助手函式預設每次呼叫都會重新連線資料庫(目的是
Flask高階應用06---模型的CRUD和高階用法
一、資料對映(資料庫crud基礎操作) 注意:在遷移前首先要開啟資料庫mysql 1.建立模型==create_all() 對建立的模型資料進行遷移,這個方法只能用於首次建立,後面遷移需要用migrate(不建議用),建議用sql語句,orm實現的資料庫遷移不是最有方式 @b
Django載入資料庫和使用模型
#setting.py中 DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3'pycharm預設自帶的資料庫, #'NAME': os.path.join
tp5資料庫查詢和模型結合使用
基類中的寫法 //側邊欄資料 //先得到許可權的二維陣列,狀態開啟的 $cate_arr = Db::name("category") ->where(["status"=>1])
EF Core 模型更行資料庫,和從資料庫生成模型命令
從模型更新庫 PowerShell: 刪除資料庫,如果存在則取執行 Drop-Database PowerShell:第一步 Add-Migration InitialCreate 第二步 Update-Database .Net Core CLi :第一步 dotn
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(2)建立資料庫和資料模型
索引 簡述 我們建立一個數據庫然後生成資料模型,新增ADO.NET實體資料模型,這裡呢常用的有兩種方式,一種是DbFirst,一種是CodeFirst,為了簡便,我們使用DbFirst。有基礎的朋友可以使用CodeFirst,對專案沒有影響的。 專案準備 我們用的工具是:VS 2013 + Sql
Android資料庫ORM框架用法、原始碼和效能比較分析
基本用法 LitePal LitePal是一款開源的Android資料庫框架,它採用了物件關係對映(ORM)的模式,LitePal很“輕”,jar包只有100k不到,使用起來也比較簡單,原始碼地址為Github地址。 首先需要引入lib,可以通過g
ThinkPHP5學習(12)模型和關聯
在application/index下建model目錄。 以Test為例,自定義表名,這種比較少。 現在以User為例。 你只要在model下建好Users.php就可以了。 如果表名為user_level,model下命名為UserLevel.ph
odoo系統中name_search和name_get用法
打印 per sequence not 添加 product xpath ret 領料單 自動帶出工序和工序序號,兩個條件都能搜索,並且兩個都帶出來顯示在前端: # 輸入工序序號會自動帶出工序名// def name_search(self, cr,user,name=
腳本引用中使用defer和async用法和區別
兩個 不依賴 doc 體驗 html 中文 htm 停止 其他 是的,就是在頁面腳本引用的時候設置defer或者async,為什麽會有這兩個屬相來輔助腳本加載那,因為瀏覽器在遇到script標簽的時候,文檔的解析會停止,不再構建document,有時打開一個網頁上會出現空
SQLServer中exists和except用法
sqlserver sql 一、exists1.1 說明EXISTS(包括 NOT EXISTS)子句的返回值是一個BOOL值。EXISTS內部有一個子查詢語句(SELECT ... FROM...),我將其稱為EXIST的內查詢語句。其內查詢語句返回一個結果集。EXISTS子句根據其內查詢語句的結果
chipmunk 物理引擎的基本概念和基本用法
num 碰撞回調 2.0 ddb mat sha print 單獨 得出 chipmunk是一個開源2D物理引擎, 項目主頁:http://code.google.com/p/chipmunk-physics/ 工作需要研究了一下,這個引擎的資料還是不多,我閱讀了
Objective-C中的@property和@synthesize用法
有時 頭文件 關鍵字 nbsp nsa atomic 所有者 ica 風險 描述 @代表“Objective-C”的標誌,證明您正在使用Objective-C語言。 是Objective-C語言關鍵詞。 @property與@synthesize配對使用。 功能:讓編譯
HashMap、HashTable、LinkedHashMap和TreeMap用法和區別
strong style 取出 能力 順序 ron public ons 保存 Java為數據結構中的映射定義了一個接口java.util.Map,它有四個實現類,分別是HashMap、HashTable、LinkedHashMap和TreeMap。本節實例主要介紹這4中實
ES6模塊的import和export用法
ron pan console 完全 any 解決方案 例子 異步加載 直觀 ES6之前已經出現了js模塊加載的方案,最主要的是CommonJS和AMD規範。commonjs主要應用於服務器,實現同步加載,如nodejs。AMD規範應用於瀏覽器,如requirejs,為異步
【轉】mysql的SQL_NO_CACHE(在查詢時不使用緩存)和sql_cache用法
his let 作用 upd 做了 ble effect table mea 轉自:http://www.169it.com/article/5994930453423417575.html 為了測試sql語句的效率,有時候要不用緩存來查詢。 使用 SELECT SQL
set的特性和基本用法——python3.6
技術 card pda 測試 display pla 不能 差集 pytho 特性 無序,不重復的數據組合,用{}表示,eg:{1,2,3,4,5,6} 用途 去重,把一個列表變成集合,就自動去重了 關系測試,測試兩組數據之間的交集,差集,並集,對稱差集,包含
c語言中#和##的用法
報錯 用法 == 預處理器 tor () name 文件 就是 一、一般用法 我們使用#把宏參數變為一個字符串,用##把兩個宏參數貼合在一起. 用法: #include<cstdio> #include<climits> using namespac
屬性驅動和模型驅動的簡單了解
一個 getpara java col bsp set get 宋體 定義 1)屬性驅動:就是jsp表單中的name都和action當中的一一屬性對應,這樣在action當中就不用像servlet一樣去通過String username=request.getParamet