程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> ThinkPHP的CURD方法及查詢方法一覽

ThinkPHP的CURD方法及查詢方法一覽

編輯:關於PHP編程

所謂CURD。即對數據庫操作的四個基本操作(CURD):C:create(創建)、U:update(更新)、R:read(讀取)和D:detele(刪除)。
在ThinkPHP中,並不是一定以這幾個名字的方法,這裡列出常見的:select,find,findAll,save,create等方法:

D讀取:
select->()查詢數據集,和findAll->()相同。例如:
$User->where(‘status=1′)->order(‘create_time’)->limit(10)->select();
注意:在連貫操作中除了select方法必須放到最後一個外,其他的連貫操作的方法調用順序沒有先後,例如,下面的代碼和上面的等效:
$User->order(‘create_time’)->where(‘status=1′)->limit(10)->select();

如果丌習慣使用連貫操作癿話,新版迓支持直接使用參數迕行查诟癿方式。例如上面癿代碼可以改
寫為:
$User->select(array('order'=>'create_time', 'where'=>'status=1', 'limit'=>'10'));


find->()方法,和以上兩種方法類似。區別在只返回一條數據。可以和getField->()獲取一條記錄的某個字段值一起用。


select和findall效果一樣,返回的是一個二維數組。如
array(1) {
      [0] => array(8)
{ ["rank_id"] => string(3) “151″
["rank_name"] => string(7) “測試9″
["rank_memo"] => string(3) “123″
["uid"] => string(5) “59471″
["rank_kw"] => string(6) “重要”
["rank_uptime"] => string(10) “1280202914″
["isverify"] => string(1) “0″
["ishot"] => string(1) “0″
}
   }
find的效果如下,返回的是一個一維數組:
array(8) {
["rank_id"] => string(3) “151″
["rank_name"] => string(7) “測試9″
["rank_memo"] => string(3) “123″
["uid"] => string(5) “59471″
["rank_kw"] => string(6) “重要”
["rank_uptime"] => string(10) “
1280202914″ ["isverify"] => string(1) “0″
["ishot"] => string(1) “0″
}

Where方法:用於查詢或者更新條件的定義

Table方法:定義要操作的數據表名稱
$Model->Table(‘think_user user’)->where(‘status>1′)->select();

field方法:定義要查詢的字段
field方法的參數支持字符串和數組,例如,
$Model->field(‘id,nickname as name’)->select();
$Model->field(array(‘id’,'nickname’=>’name’))->select();
如果不使用field方法指定字段的話,默認和使用field(‘*’)等效。

 

U更新,C創建:

data,add,save方法:數據對象賦值,添加,保存。例如:
$data['name'] = ‘ThinkPHP’;
$data['email'] = ‘[email protected]’;
$Model->data($data)->add();//新增,相當於insert,連貫寫法
$Model->add($data); //新增,相當於insert,非連貫寫法
$Model->data($data)->where(‘id=3′)->save(); //修改,相當於update

需要注意的是,save方法的話,如果數據沒有變化,那麼默認返回的操作是FALSE。但是這個save執行是OK的,這個需要注意。

create->()自動從POST的字段組成形如$data的數據

$User=D("User");
$User->create(); //默認通過表單提交的數據進行創建
$User->add(); //新增

如果你癿主鍵是自劢增長類型,幵丏如果揑入數據成功癿話,Add方法癿迒回值就是最新揑入癿主鍵值,可以直接獲叏。 

使用data方法創建癿數據對象丌會迕行自劢驗證和過濾操作,請自行處理。但在迕行add戒者
save操作癿旪候,數據表中丌存在癿字段以及非法癿數據類型(例如對象、數組等非標量數據)是會自
劢過濾癿,丌用擔心非數據表字段癿寫入導致 SQL錯詣癿問題。

我們熟恲癿令牉驗證、自劢驗證和自劢完成(我們會在後面看刡相關癿用法)功能,其實都
必須通過create方法才能生效。Create方法創建癿數據對象是保存在內存中,幵沒有實際寫入刡數據庫
中,直刡使用add戒者save方法。如果叧是想簡單創建一個數據對象,幵丌需要完成一些額外癿功能
癿話,可以使用data方法簡單癿創建數據對象。

 

setInc和setDec方法。對於統計字段(通常指的是數字類型)的更新:
$Model->setInc(‘score’,'id=5′,3); // 用戶的積分加3
$Model->setInc(‘score’,'id=5′); // 用戶的積分加1
$Model->setDec(‘score’,'id=5′,5); // 用戶的積分減5
$Model->setDec(‘score’,'id=5′); // 用戶的積分減1

D刪除:

delete->()刪除數據
$User->where(‘status=0′)->order(‘create_time’)->limit(’5′)->delete();

Model的其他常見方法:

order方法:結果排序 例如:
order(‘id desc’)
排序方法支持對多個字段的排序
order(‘status desc,id asc’)
order方法的參數支持字符串和數組,數組的用法如下:
order(array(‘status’=>’desc’,'id’))

limit方法:結果限制
limit(’1,10′)
如果使用limit(’10′) 等效於 limit(’0,10′)

page方法:查詢分頁,Page方法的用法和limit方法類似,格式為:
Page(‘page[,listRows]‘)
Page表示當前的頁數,listRows表示每頁顯示的記錄數。例如表示每頁顯示10條記錄的情況下面,獲取第2頁的數據:
Page(’2,10′)
listRow如果不寫的話,會讀取limit(‘length’) 的值,例如表示每頁顯示25條記錄的情況下面,獲取第3頁的數據:
limit(25)->page(3);
如果limit也沒有設置的話,則默認為每頁顯示20條記錄。

Join方法:查詢Join支持.Join方法的參數支持字符串和數組,並且join方法是連貫操作中唯一可以多次調用的方法。例如:
$Model->join(‘ work ON artist.id = work.artist_id’)->join(‘card ON artist.card_id = card.id’)->select();
默認采用LEFT JOIN 方式,如果需要用其他的JOIN方式,可以改成
$Model->join(‘RIGHT JOIN work ON artist.id = work.artist_id’)->select();

Distinct方法:查詢的Disiinct支持。查詢數據的時候進行唯一過濾
$Model->Distinct(true)->select();

Relation方法:關聯查詢支持
$Model->Relation(true)->select();


條件查詢

$map->put('name','php'); //name='php'

('name',array('like','think')); //name like '...'

('id',array('in',array(1,2,4)));

('id',array('10','3','or')); //id>=10 or <=3

 


thinkphp多表查詢語句 

1、table()函數
thinkphp中提供了一個table()函數,具體用法參考以下語句:
$list=$Demo->table('think_blog blog,think_type type')->where('blog.typeid=type.id')->field('blog.id as id,blog.title,blog.content,type.typename as type')->order('blog.id desc' )->limit(5)->select();
echo $Demo->getLastSql(); //打印一下SQL語句,查看一下
 
2、join()函數
看一下代碼:
$Demo = M('artist');
$Demo->join('RIGHT JOIN think_work ON think_artist.id = think_work.artist_id' );
//可以使用INNER JOIN 或者 LEFT JOIN 這裡一定要注意表名的前綴!
echo $Demo->getLastSql(); //打印一下SQL語句,查看一下

 

附最簡單的增刪查改的代碼
[php] 
// 查詢數據 
public function index(){ 
    $Form   = M("Form"); 
    $list   =   $Form->limit(5)->order('id desc')->findAll(); 
    $this->assign('list',$list); 
    $this->display(); 

// 寫入數據 
public function insert() { 
    $Form   =   D("Form"); 
    if($vo = $Form->create()) { 
        $list=$Form->add(); 
        if($list!==false){ 
            $this->success('數據保存成功!'); 
        }else{ 
            $this->error('數據寫入錯誤!'); 
        } 
    }else{ 
        $this->error($Form->getError()); 
    } 

 
// 更新數據 
public function update() { 
    $Form   =   D("Form"); 
    if($vo = $Form->create()) { 
        $list=$Form->save(); 
        if($list!==false){ 
            $this->success('數據更新成功!'); 
        }else{ 
            $this->error("沒有更新任何數據!"); 
        } 
    }else{ 
        $this->error($Form->getError()); 
    } 

// 刪除數據 
public function delete() { 
    if(!emptyempty($_POST['id'])) { 
        $Form   =   M("Form"); 
        $result =   $Form->delete($_POST['id']); 
        if(false !== $result) { 
            $this->ajaxReturn($_POST['id'],'刪除成功!',1); 
        }else{ 
            $this->error('刪除出錯!'); 
        } 
    }else{ 
        $this->error('刪除項不存在!'); 
    } 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved