thinkphp做爲國內現階段最成熟的框架;沒有之一;php
不得不說是有好些特別方便的方法的;html
然而若是初接觸thinkphp的時候不免會被搞的有點迷茫;thinkphp
for example這些:數組
getBy框架
getFieldthis
getFieldBycode
我曾在至關一段時間內都用的迷迷糊糊的;htm
直到後來把它們總結以下:對象
咱先虛擬一張表出來開發
+----+--------+--------------+
| id | name | avatar |
+----+--------+--------------+
| 1 | 白俊遙 | bjy.jpg |
| 2 | 帥白 | shuaibai.jpg |
| 3 | test | shuaibai.jpg |
+--+-------+----------------+
一:如今咱們要獲取姓名爲 白俊遙 的這條數據;
常規狀況是這樣寫的;
$data=M('Test')->where(array('name'=>'白俊遙'))->find()
若是用getby
的話就能夠簡化爲
$data=M('Test')->getByName('白俊遙');//經過name字段獲取整條數據 $data=M('Test')->getByAvatar('bjy.jpg')//同理可得若是想經過avatar獲取整條數據就是這樣寫了 $data=M('Test')->getById(1);//聰明的童鞋當即就想到了若是要經過id那不就是這樣?對; //可是若是id是主鍵的話;這裏有個更好用的方法 $data=M('Test')->find(1);//獲得的結果和M('Test')->getById(1);是同樣的 打印值: Array ( [id] => 1 [name] => 白俊遙 [avatar] => bjy.jpg )
官方詳細文檔:http://document.thinkphp.cn/manual_3_2.html#dynamic_query
總結就是說;getBy
後邊是要跟一個字段的;
咱們也發現了;上面獲取到的都是整條整條的數據;
二:然而實際開發中;不少時候咱們是想經過用戶名:白俊遙 找到他的頭像:bjy.jpg;
這時候就是getFieldBy
的應用場景了;
常規狀況是這樣寫的;
$data=M('Test')->field('avatar')->where(array('name'=>'白俊遙'))->find(); $avatar=$data['avatar'];
若是用getField
的話能夠簡化爲:
$avatar=M('Test')->where(array('name'=>'白俊遙'))->getField('avatar');
若是getFieldBy
那簡化的更殘忍了:
$avatar=M('Test')->getFieldByName('白俊遙','avatar'); 打印$avatar: bjy.jpg
官方詳細文檔:http://document.thinkphp.cn/manual_3_2.html#dynamic_query
總結就是說getFieldBy
後面跟一個字段括號內有兩個參數;第一個跟Field對應的條件;第二個是要取的字段;
三:經過頭像名 shuaibai.jpg 獲取使用這個頭像的用戶名 帥白、test
常規是這樣寫的:
$data=M('Test')->field('name')->where(array('avatar'=>'shuaibai.jpg'))->select(); $name_array=array_column($data, 'name');
若是getField的話就能夠簡化爲:
$avatar_array=M('Test')->where(array('avatar'=>'shuaibai.jpg'))->getField('name',true); 打印$avatar_array: Array ( [0] => 帥白 [1] => test )
官方詳細文檔:http://document.thinkphp.cn/manual_3_2.html#read_data
總結就是說:getField
是須要本身寫where的;傳的第一個參數就是須要獲取的字段;
若是隻獲取一條值的時候不須要傳第二個參數;若是有多個的話;則第二個參數傳true;
更詳細的用法偷個懶直接複製官方文檔了:
讀取字段值其實就是獲取數據表中的某個列的多個或者單個數據,最經常使用的方法是 getField
方法。
示例以下:
$User = M("User"); // 實例化User對象 // 獲取ID爲3的用戶的暱稱 $nickname = $User->where('id=3')->getField('nickname');
默認狀況下,當只有一個字段的時候,返回知足條件的數據表中的該字段的第一行的值。
若是須要返回整個列的數據,能夠用:
$User->getField('id',true); // 獲取id數組 //返回數據格式如array(1,2,3,4,5)一維數組,其中value就是id列的每行的值
若是傳入多個字段的話,默認返回一個關聯數組:
$User = M("User"); // 實例化User對象 // 獲取全部用戶的ID和暱稱列表 $list = $User->getField('id,nickname'); //兩個字段的狀況下返回的是array(`id`=>`nickname`)的關聯數組, 以id的值爲key,nickname字段值爲value
這樣返回的list是一個數組,鍵名是用戶的id字段的值,鍵值是用戶的暱稱nickname。
若是傳入多個字段的名稱,例如:
$list = $User->getField('id,nickname,email'); //返回的數組格式是array(`id`=>array(`id`=>value,`nickname`=>value,`email`=>value)) 是一個二維數組,key仍是id字段的值,但value是整行的array數組, 相似於select()方法的結果遍歷將id的值設爲數組key
返回的是一個二維數組,相似select方法的返回結果,區別的是這個二維數組的鍵名是用戶的id(準確的說是getField方法的第一個字段名)。
若是咱們傳入一個字符串分隔符:
$list = $User->getField('id,nickname,email',':');
那麼返回的結果就是一個數組,鍵名是用戶id,鍵值是 nickname:email
的輸出字符串。
getField方法還能夠支持限制數量,例如:
$this->getField('id,name',5); // 限制返回5條記錄 $this->getField('id',3); // 獲取id數組 限制3條記錄
能夠配合使用order方法使用。更多的查詢方法能夠參考查詢語言章節。
認真寫一篇博客真心不容易;寫着寫着就熬到了凌晨1點了;希望能讓童鞋們少走一些彎路;也算不枉這麼辛苦的碼字;
本文爲白俊遙原創文章,轉載無需和我聯繫,但請註明來自白俊遙博客http://www.baijunyao.com