Db: 是TP5操作数据库的入口类。它的作用是为连接数据库做准备,我们只需要在database.php里填写相应的配置即可。
Connection: 是TP5的连接器类,因为TP5支持四种数据库(Mysql,Pgsql,Sqlite,Sqlsrv),所以TP5封装了一个类来提供统一的调用接口来支持我们连接数据库(这里的连接是惰性连接,只有在执行SQL的时候才会真正连接)。
Query: 查询器,因为不同数据库的SQL语句不同,所以封装了一个Query类来提供统一的接口,以实现不同数据库的CURD操作。查询器是TP5数据访问层的核心,它连接了Connection和Builder。
Builder: 生成器。这个类主要是把Query的查询参数生成相应的sql语句,然后把其返回给Connection供其使用。
在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'] = 'thinkphp@qq.com';// 更新操作Db::table('user')->update($user);
如果是模型操作的話,就可以對應下面的程式碼實作
// 查询操作$user = User::get(1);// 取值操作echo $user->name; echo $user->email;// 设置操作$user->name = 'topthink';$user->email = 'thinkphp@qq.com';// 更新操作$user->save();
這裡是在模型的外部,也就是控制器裡的取值和設定操作,但在模型內部,是使用如下方式:
// 取值操作echo $user->getData('name'); echo $user->getData('email');// 设置操作echo $user->data('name', 'SpawN'); echo $user->data('email', '123@qq.com');
模型的CURD操作
建立
Db 使用:
Db::table('user')->insert([ 'name' => 'spawn', 'email' => '123@qq.com'])
模型用法:
$user = new User;$user->save([ 'name' => 'spawn', 'email' => '123@qq.com'])$user = User::create([ 'name' => 'sapwn', 'email' => '123@qq.com'])
總結:
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' => 'heihei@qq.com'])
$user = User::get(1);$user->save([ 'name' => 'haha', 'email' => 'heihei@qq.com']) 或者 User::update([ 'name' => 'topthink', 'email' => 'topthink@qq.com', ], ['id' => 1]);
總結:
需要注意的是,模型的更新操作是只更新有变化的数据。性能比较好。################# ##
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 ### del# delete #PPHydelete # 更多相關內容請留意php中文網。 ######相關建議:#########關於thinkphp5.0資料庫操作的案例###############列舉ThinkPHP5與ThinkPHP3的一些異同點# ##############建立一個最簡單的ThinkPhp專案工程##########
以上是關於ThinkPHP5的資料庫與模型用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!