首頁  >  文章  >  後端開發  >  關於ThinkPHP5的資料庫與模型用法

關於ThinkPHP5的資料庫與模型用法

jacklove
jacklove原創
2018-06-15 11:07:385102瀏覽

1,TP5的資料庫架構

關於ThinkPHP5的資料庫與模型用法

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中,對於資料庫的存取有三種方法:

  1. 原生sql語句。

Db::query('select * from think_user where id=?',[8]);
Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);
  1. 查詢建構器

關於ThinkPHP5的資料庫與模型用法

#要注意的是,上述的查詢方法中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();
  1. 模型

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]);

總結:









##方法 作用 回傳值###save    更新資料   影響的記錄數###update  更新資料(靜態)    返回模型物件實例###
需要注意的是,模型的更新操作是只更新有变化的数据。性能比较好。
################# ##
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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn