亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 25
粉絲 1
評(píng)論 0
訪問量 29233
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
thinkPHP對(duì)數(shù)據(jù)庫的CURD操作--20190321
曲小冷
原創(chuàng)
1413人瀏覽過

thinkPHP對(duì)數(shù)據(jù)庫的CURD操作總共有三種:原生、查詢構(gòu)造器、模型

1、原生

    查詢 query(select)   

    更新和寫入 execute(update/insert) 如果數(shù)據(jù)非法或者查詢錯(cuò)誤則返回false,否則返回影響的記錄數(shù)。

$res = Db::query('select * from staff');
$sql = "update staff set `email`='tmz@php.cn' WHERE  `id` = 11";
$res = Db::execute($sql);
dump($res);

2、查詢構(gòu)造器

首先需要在thinkPHP的 config/database.php 配置文件中配置下數(shù)據(jù)庫的連接數(shù)據(jù)。

然后通過查詢構(gòu)造器進(jìn)行操作:

2.1 查詢

Db::table('staff')
->where('id',1)    
->find() | ->select() | ->value('name') | ->column('name','id')

find  方法只能查詢滿足條件的第一條數(shù)據(jù),查詢結(jié)果不存在,返回 null,否則返回結(jié)果數(shù)組
select   方法查詢滿足條件所有數(shù)據(jù),結(jié)果是一個(gè)二維數(shù)組,如果結(jié)果不存在,返回空數(shù)組
value   查詢某個(gè)字段的值  方法查詢結(jié)果不存在,返回 null
column   查詢某一列的值   方法查詢結(jié)果不存在,返回空數(shù)組

2.2 新增

* 添加單條記錄

$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::table('staff')
->insert($data) | ->data($data)->insert() | ->strict(false)->insert($data) | ->insert($data, true)
->insertGetId($data)

insert   方法添加數(shù)據(jù)成功返回添加成功的條數(shù),通常情況返回 1
data  方法傳入要添加的數(shù)據(jù) 數(shù)據(jù)表里面沒有foo或者bar字段,那么就會(huì)拋出異常
strict  不存在的字段的值將會(huì)直接拋棄
insertGetId  方法添加數(shù)據(jù)成功返回添加數(shù)據(jù)的自增主鍵

* 添加多條數(shù)據(jù)

$data = [
    ['foo' => 'bar', 'bar' => 'foo'],
    ['foo' => 'bar1', 'bar' => 'foo1'],
    ['foo' => 'bar2', 'bar' => 'foo2']];
Db::table('staff')
->insertAll($data) | ->data($data)->insertAll()

insertAll  方法添加數(shù)據(jù)成功返回添加成功的條數(shù)
data   方法傳入要添加的數(shù)據(jù)
* 確保要批量添加的數(shù)據(jù)字段是一致的

2.3 更新

Db::table('staff')
->where('id', 1)    // 數(shù)據(jù)
->update(['name' => 'thinkphp']) | ->data(['name' => 'thinkphp'])->update()

update 方法返回影響數(shù)據(jù)的條數(shù),沒修改任何數(shù)據(jù)返回 0
data  方法傳入要更新的數(shù)據(jù)
* 如果update方法和data方法同時(shí)傳入更新數(shù)據(jù),則會(huì)進(jìn)行合并。

* 如果數(shù)據(jù)中包含主鍵,可以直接使用:

Db::table('staff')
->update(['name' => 'thinkphp','id'=>1]);
實(shí)際生成的代碼:UPDATE `think_user`  SET `name`='thinkphp'  WHERE  `id` = 1

* 更新字段值

Db::table('staff')
->where('id',1)
->setField('name', 'thinkphp')

setField  方法返回影響數(shù)據(jù)的條數(shù),沒修改任何數(shù)據(jù)字段返回 0

* 自增或自減一個(gè)字段的值

Db::table('staff')
->where('id', 1)
->setInc('score') | ->setInc('score', 5)

setInc/setDec  方法自增或自減一個(gè)字段的值( 如不加第二個(gè)參數(shù),默認(rèn)步長為1)
setInc/setDec  支持延時(shí)更新,如果需要延時(shí)更新則傳入第三個(gè)參數(shù),下例中延時(shí)10秒更新

Db::table('staff')
->where('id', 1)
->setInc('score', 1, 10)

setInc/setDec  方法返回影響數(shù)據(jù)的條數(shù),如果使用了延遲更新的話,可能會(huì)返回true

2.4 刪除

Db::table('staff')->delete(1) | ->delete([1,2,3])  
Db::table('staff')->where('id',1)->delete()
Db::table('staff')->delete(true)

delete  方法返回影響數(shù)據(jù)的條數(shù),沒有刪除返回 0

2.5 軟刪除

一般情況下,業(yè)務(wù)數(shù)據(jù)不建議真實(shí)刪除數(shù)據(jù),系統(tǒng)提供了軟刪除機(jī)制(模型中使用軟刪除更為方便)
// 軟刪除數(shù)據(jù) 使用delete_time字段標(biāo)記刪除
Db::table('staff')
->where('id',1)
->useSoftDelete('delete_time',time())
->delete();

useSoftDelete  方法表示使用軟刪除,并且指定軟刪除字段為delete_time,寫入數(shù)據(jù)為當(dāng)前的時(shí)間戳。

2.6 鏈?zhǔn)秸{(diào)用

Db::table('staff')
->field()
->where()
->limit()

table('表名')  用于指定操作的數(shù)據(jù)表

field('字段1,字段2,...') 字符串 標(biāo)識(shí)要返回或者操作的字段,可以用于查詢和寫入操作
field(['字段1','字段2','字段N',...]) 數(shù)組
field(['字段1','字段2'=>'別名'])  數(shù)組方式可以為某些字段定義別名
field(true) 顯示獲取數(shù)據(jù)表的所有字段列表

where('字段名','表達(dá)式','查詢條件') 表達(dá)式查詢
where(['name'	=>'thinkphp','status'=>	1]) 數(shù)組條件查詢:關(guān)聯(lián)數(shù)組和索引數(shù)組
where('type=1 AND status=1')  字符串條件查詢

limit(number) 限制結(jié)果數(shù)量
limit(起始數(shù)據(jù),顯示條數(shù)) 分頁查詢

order('id', 'desc')  對(duì)操作的結(jié)果排序或者優(yōu)先級(jí)限制  ORDER BY `id` desc
order(['order','id'=>'desc']) 對(duì)多個(gè)字段的排序  ORDER BY `order`,`id` desc
  * 如果沒有指定desc或者asc排序規(guī)則的話,默認(rèn)為asc

strict(false) 設(shè)置是否嚴(yán)格檢查字段名

alias('別名') 設(shè)置當(dāng)前數(shù)據(jù)表的別名

3、模型查詢

模型查詢和數(shù)據(jù)庫查詢方法的區(qū)別主要在于,模型中的查詢的數(shù)據(jù)在獲取的時(shí)候會(huì)經(jīng)過獲取器的處理,以及更加對(duì)象化的獲取方式。

模型查詢一般一個(gè)模型是對(duì)應(yīng)著一張表,創(chuàng)建模型并且繼承系統(tǒng)的Model模型類庫。

模型會(huì)自動(dòng)對(duì)應(yīng)數(shù)據(jù)表,模型類的命名規(guī)則是除去表前綴的數(shù)據(jù)表名稱,采用駝峰法命名,并且首字母大寫 

模型常用的設(shè)置屬性:

模型設(shè)置屬性.png

namespace app\index\model;
use think\Model;
class User extends Model{
    // 設(shè)置當(dāng)前模型對(duì)應(yīng)的完整數(shù)據(jù)表名稱
    protected $table = 'staff';
    
    // 設(shè)置當(dāng)前模型的數(shù)據(jù)庫連接
    protected $connection = 'db_config';
    
    // 默認(rèn)主鍵為id,如果你沒有使用id作為主鍵名,需要在模型中設(shè)置屬性
    protected $pk = 'uid';
}

3.1 查詢

// 主鍵查詢
$res = User::get(1);
// 查詢構(gòu)造器
$res = User::field('id,name,email')
        ->where('id',5)
        ->find();
// 閉包 必傳參數(shù) Query $query
$res = User::get(function (Query $query){
    $query->where('id',7);
});

* 根據(jù)主鍵查詢單條數(shù)據(jù)

$user = User::get(1);  echo $user->name;
$user = User::where('name', 'thinkphp')->find();   echo $user->name;

get(主鍵值)  查詢滿足當(dāng)前主鍵的數(shù)據(jù)
模型無論使用get還是find方法查詢,返回的是都當(dāng)前模型的對(duì)象實(shí)例,如果查詢數(shù)據(jù)不存在,則返回Null,除了獲取模型數(shù)據(jù)外,還可以使用模型的方法。

* 根據(jù)主鍵獲取多個(gè)數(shù)據(jù)

$list = User::all('1,2,3') | all([1,2,3])
foreach($list as $key=>$user){
    echo $user->name;
}

all() 沒參數(shù)則是獲取所有數(shù)據(jù)
all('1,2,3')或all([1,2,3]) 獲取主鍵值為 1,2,3 的數(shù)據(jù)
*****
User:: 相當(dāng)于 Db::table(),所以可以使用User::代替Db::table()進(jìn)行操作--使用查詢構(gòu)造器查詢,但是第一個(gè)方法一定是靜態(tài)調(diào)用
User::where('status', 1)->limit(3)->order('id', 'asc')->all()

3.2 新增

* 新增單條數(shù)據(jù)

實(shí)例化模型對(duì)象后賦值并保存
$user= new User;
$user->name = 'thinkphp';
$user->email = 'thinkphp@qq.com';
$user->save();
或  直接傳入數(shù)據(jù)到save方法批量賦值
$user->save([
    'name'  =>  'thinkphp',
    'email' =>  'thinkphp@qq.com'])
或   直接在實(shí)例化的時(shí)候傳入數(shù)據(jù)
$user = new User([
    'name'  =>  'thinkphp',
    'email' =>  'thinkphp@qq.com']);
$user->save();

獲取自增ID  echo $user->id;
save 方法返回影響的記錄數(shù),并且只有當(dāng)before_insert事件返回false的時(shí)候返回false,從V5.1.6+版本開始統(tǒng)一返回布爾值
* 添加多條數(shù)據(jù)

$list = [
    ['name'=>'thinkphp','email'=>'thinkphp@qq.com'],
    ['name'=>'onethink','email'=>'onethink@qq.com']];
$user->saveAll($list);

saveAll 方法新增數(shù)據(jù)返回的是包含新增模型(帶自增ID)的數(shù)據(jù)集對(duì)象。默認(rèn)會(huì)自動(dòng)識(shí)別數(shù)據(jù)是需要新增還是更新操作,當(dāng)數(shù)據(jù)中存在主鍵的時(shí)候會(huì)認(rèn)為是更新操作,如果你需要帶主鍵數(shù)據(jù)批量新增,可以使用下面的方式:

$list = [
    ['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com'],
    ['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq.com'],];
$user->saveAll($list, false);

** 靜態(tài)方法

$user = User::create([
    'name'  =>  'thinkphp',
    'email' =>  'thinkphp@qq.com']);
echo $user->name;
echo $user->email;
echo $user->id; // 獲取自增ID

和save方法不同的是,create方法返回的是當(dāng)前模型的對(duì)象實(shí)例

3.3 查找和更新

在取出數(shù)據(jù)后,更改字段內(nèi)容后使用save方法更新數(shù)據(jù)。這種方式是最佳的更新方式。
$user = User::get(1);
$user->name = 'thinkphp';
$user->email = 'thinkphp@qq.com';
$user->save();

* 查詢構(gòu)造器

$user = User::where('status',1)
->where('name','liuchen')
->find();

* 批量更新數(shù)據(jù)  

** saveAll 方法批量更新數(shù)據(jù),只需要在批量更新的數(shù)據(jù)中包含主鍵即可

$list = [
    ['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com'],
    ['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq.com']];
$user->saveAll($list);
批量更新方法返回的是一個(gè)數(shù)據(jù)集對(duì)象。批量更新僅能根據(jù)主鍵值進(jìn)行更新,其它情況請(qǐng)自行處理。

** 靜態(tài)方法

User::where('id', 1)
    ->update(['name' => 'thinkphp']);
或
User::update(['id' => 1, 'name' => 'thinkphp']);

3.4 刪除

* 刪除模型數(shù)據(jù)

$user = User::get(1);
$user->delete();
delete方法返回影響的記錄數(shù)

* 靜態(tài)方法(根據(jù)主鍵刪除)

User::destroy(1);
User::destroy('1,2,3') | destroy([1,2,3]);

destroy  方法傳入空值(包括空字符串和空數(shù)組)的時(shí)候不會(huì)做任何的數(shù)據(jù)刪除操作,但傳入0則是有效的

* 閉包刪除

User::destroy(function($query){
    $query->where('id','>',10);
});

*  如果刪除當(dāng)前模型數(shù)據(jù),用delete方法,如果需要直接刪除數(shù)據(jù),使用destroy靜態(tài)方法

本博文版權(quán)歸博主所有,轉(zhuǎn)載請(qǐng)注明地址!如有侵權(quán)、違法,請(qǐng)聯(lián)系admin@php.cn舉報(bào)處理!
全部評(píng)論 文明上網(wǎng)理性發(fā)言,請(qǐng)遵守新聞評(píng)論服務(wù)協(xié)議
0條評(píng)論
作者最新博文
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學(xué)習(xí)!
    全站2000+教程免費(fèi)學(xué)