最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ThinkPHP視圖查詢詳解

 更新時間:2014年06月30日 15:51:29   投稿:shichen2014  
這篇文章主要介紹了ThinkPHP視圖查詢,需要的朋友可以參考下

ThinkPHP提供的視圖查詢應用功能十分強大,用戶利用視圖查詢功能可以將多個數(shù)據(jù)表的字段內容按需要進行指定和篩選,組織成一個基于這些數(shù)據(jù)表的視圖模型,然后就可以通過該模型直接進行多表聯(lián)合查詢,非常方便和簡單。

例如在項目中,我們定義有三個表:

user          用戶基礎表,
user_info   用戶詳細信息表,
dept          部門分類表

現(xiàn)在我們需要獲取某個用戶信息,
該信息要包括用戶的帳號名稱和相關資料與及所在部門的名稱,
這時候我們可以利用視圖查詢進行處理。

下面舉例加以說明:

1.構建一個新項目并進行相關配置(可參考前面的教程,這里省略)
2.創(chuàng)建一個數(shù)據(jù)庫tpview,并添加這三個表
(1) 用戶表

CREATE TABLE `think_user` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID編號',
 `name` varchar(20) NOT NULL COMMENT '帳戶',
 `password` varchar(32) NOT NULL COMMENT '密碼',
 `dept_id` smallint(6) unsigned NOT NULL,
 `status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '開放狀態(tài)',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='會員表' AUTO_INCREMENT=2 ;
INSERT INTO `think_user` (`id`, `name`, `password`, `dept_id`, `status`) VALUES
(1, 'zzguo28', '123456', 2, 1);

(2)用戶信息表

CREATE TABLE `think_user_info` (
 `user_id` int(11) NOT NULL COMMENT '用戶id',
 `nick_name` varchar(30) NOT NULL COMMENT '用戶昵稱',
 `email` varchar(100) NOT NULL COMMENT '郵箱地址',
 `address` varchar(100) NOT NULL COMMENT '詳細地址',
 `gender` tinyint(1) NOT NULL DEFAULT '0' COMMENT '性別',
 `mobile` varchar(100) NOT NULL COMMENT '手機號碼',
 `telephone` varchar(100) NOT NULL COMMENT '電話號碼',
 KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='用戶信息表';
INSERT INTO `think_user_info` (`user_id`, `nick_name`, `email`, `address`, `gender`, `mobile`, `telephone`) VALUES
(1, '國', 'zzguo28@163.com', 'TP路think街1.6號', 1, '12345678901', '123456');

(3) 部門分類表

CREATE TABLE `think_dept` (
 `id` smallint(3) NOT NULL AUTO_INCREMENT,
 `name` varchar(50) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
INSERT INTO `think_dept` (`id`, `name`) VALUES
(1, '開發(fā)部'),
(2, '銷售部'),
(3, '財務部');

3.在項目/Lib/Model下創(chuàng)建這三個表的基礎模型Model
  本示例沒涉及到驗證等其它功能,所以只要簡單定義測可,例如

 <?php
  class UserModel extends Model {
  }
 ?>

其實視圖模型對應的數(shù)據(jù)表并非一定要有相應的的基礎模型,但是建議您創(chuàng)建,這樣單表和視圖都可以操作。

4.創(chuàng)建視圖模型,代碼如下,詳細注解見其后:

(附注:最新svn上已增加動態(tài)擴展模型功能,使用新版需要將protected屬性改為public屬性,建議使用動態(tài)擴展功能去使用視圖查詢,而不再是本教程的繼承方式。那樣使用會更靈活。)

<?php
import('ViewModel');
class UserViewModel extends ViewModel{
  protected $viewFields = array(
    'User'   =>array('id','name','_as'=>'u','_type'=>'left'),
    'UserInfo' =>array('email','mobile','_as'=>'ui','_on'=>'ui.user_id=u.id'),
    'Dept'   =>array('name'=>'dept','_on'=>'u.dept_id=Dept.id'),
  );
}
?>

對上述代碼解釋如下:

在第2行代碼中,由于自TP1.6版開始已將視圖查詢分離出原Model類,因此這里需要使用import方法引入了視圖模型類。

第3行代碼中,定義了該模型名稱為UserViewModel,視圖模型的名稱Model前的命名是隨意的,只是為了有別于其它模型,通常我們會以xxxViewModel這樣的方式去命名。并且一定要繼承ViewModel。(ThinkPHP1.6版無需再設置模型的viewModel屬性為true,只要繼承ViewModel則可)

第4行代碼$viewFields 屬性表示視圖模型包含的字段,每個元素定義了各個數(shù)據(jù)表或者模型所需的字段。
格式是

protected $viewFields = array(
    '表名'=>array('所需字段','_as'=>'別名定義','_on'=>'篩選條件','_type'=>'指定join類型,支持right,inner,left三種'),
);

注意到第7行代碼中的'name'=>'dept',因為User模型里面已經(jīng)存在了一個name字段,所以我們通過這種方式把Dept模型的name字段映射為dept字段,如果有多個字段,可以使用同樣的方式添加。

定義完畢后,我們在Action中進行測試,代碼如下

<?php
class IndexAction extends Action{
  public function index(){
    $dao = D('UserView');
    $where['u.id'] = 1;
    dump($dao->where($where)->find());
    dump($dao->getLastSql());
  }
}
?>

然后訪問該操作,可以看到我們成功取得所需的查詢內容:

array(1) {
 [0] => array(5) {
  ["id"] => string(1) "1"
  ["name"] => string(7) "zzguo28"
  ["email"] => string(17) "zzguo28@163.com"
  ["mobile"] => string(11) "12345678901"
  ["dept"] => string(9) "銷售部"
 }
}

并可以看到使用的sql如下

"SELECT u.id AS id,u.name AS name,ui.email AS email,ui.mobile AS mobile,Dept.name AS dept FROM think_user u LEFT JOIN think_user_info ui ON ui.user_id=u.id JOIN think_dept Dept ON u.dept_id=Dept.id WHERE ( u.id = 1 ) LIMIT 1 "

視圖模型在查詢上和普通單表并沒有多大分別,可以使用我們所熟悉的各種連貫操作,例如order,limit等等。

相關文章

  • PHP利用DWZ.CN服務生成短網(wǎng)址

    PHP利用DWZ.CN服務生成短網(wǎng)址

    這篇文章主要介紹了PHP利用DWZ.CN服務生成短網(wǎng)址,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。
    2019-08-08
  • PHP 異步執(zhí)行方法,模擬多線程的應用分析

    PHP 異步執(zhí)行方法,模擬多線程的應用分析

    本篇文章是對PHP 異步執(zhí)行方法,模擬多線程的應用進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • smarty簡單分頁的實現(xiàn)方法

    smarty簡單分頁的實現(xiàn)方法

    這篇文章主要介紹了smarty簡單分頁的實現(xiàn)方法,以一個具體的實例講述了smarty分頁的完整實現(xiàn)過程,需要的朋友可以參考下
    2014-10-10
  • 淺談php serialize()與unserialize()的用法

    淺談php serialize()與unserialize()的用法

    本篇文章是對php中的serialize()與unserialize()的應用進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • Yii基于數(shù)組和對象的Model查詢技巧實例詳解

    Yii基于數(shù)組和對象的Model查詢技巧實例詳解

    這篇文章主要介紹了Yii基于數(shù)組和對象的Model查詢技巧,結合實例形式較為詳細的分析了Yii針對數(shù)組及對象的Model查詢使用技巧,需要的朋友可以參考下
    2015-12-12
  • CI框架Session.php源碼分析

    CI框架Session.php源碼分析

    Session類并不使用PHP本身的session,而是使用類自己的session,這樣做,可以給開發(fā)者提供更大的彈性。下面我們就來仔細分析下CI框架的Session類Session.php文件
    2014-11-11
  • Laravel框架路由和控制器的綁定操作方法

    Laravel框架路由和控制器的綁定操作方法

    這篇文章主要介紹了Laravel框架路由和控制器的綁定操作方法,結合實例形式分析了Laravel框架路由與控制器綁定的操作步驟、實現(xiàn)方法與相關注意事項,需要的朋友可以參考下
    2018-06-06
  • ThinkPHP之M方法實例詳解

    ThinkPHP之M方法實例詳解

    這篇文章主要介紹了ThinkPHP的M方法,需要的朋友可以參考下
    2014-06-06
  • php使用event擴展的io復用測試的示例

    php使用event擴展的io復用測試的示例

    這篇文章主要介紹了php使用event擴展的io復用測試的示例,幫助大家更好的理解和使用php,感興趣的朋友可以了解下
    2020-10-10
  • Smarty模板語法詳解

    Smarty模板語法詳解

    這篇文章主要介紹了Smarty模板語法,結合實例形式詳細分析了Smarty模板的注釋、變量、引號、函數(shù)等基本語法與使用技巧,需要的朋友可以參考下
    2019-07-07

最新評論

盖州市| 哈巴河县| 河池市| 焦作市| 都兰县| 绍兴县| 南涧| 安龙县| 庄浪县| 佛教| 施甸县| 万山特区| 肇州县| 黄大仙区| 武陟县| 南郑县| 安阳市| 锡林郭勒盟| 佛学| 潞城市| 竹山县| 霍州市| 崇文区| 恭城| 桦甸市| 湄潭县| 道孚县| 汝阳县| 阳信县| 乌兰浩特市| 平江县| 时尚| 年辖:市辖区| 威海市| 墨江| 信宜市| 盐山县| 阿拉善右旗| 营口市| 南部县| 鹿泉市|