>백엔드 개발 >PHP 튜토리얼 >ThinkPHP 보기 쿼리

ThinkPHP 보기 쿼리

不言
不言원래의
2018-06-06 15:05:461812검색

이 글은 주로 ThinkPHP 뷰 쿼리를 소개합니다. 필요하신 분들은 참고하시면 됩니다

ThinkPHP에서 제공하는 뷰 쿼리 응용 기능은 매우 강력합니다. 사용자는 뷰 쿼리 기능을 사용하여 여러 데이터 테이블의 필드 내용을 다음과 같이 지정하고 필터링할 수 있습니다. 이러한 데이터 테이블을 기반으로 뷰 모델로 구성하면 이 모델을 통해 다중 테이블 조인트 쿼리를 직접 수행할 수 있어 매우 편리하고 간단합니다.

예를 들어 프로젝트에서는 세 개의 테이블을 정의합니다.

user                                                                                                                                                                                                   계정 이름, 관련 정보
이때 조회 쿼리를 이용하여 처리할 수 있습니다.

다음은 설명하기 위한 예입니다.


1. 새 프로젝트를 빌드하고 관련 구성을 수행합니다(이전 튜토리얼 참조, 여기에서는 생략됨)
2. 데이터베이스 tpview를 생성하고 다음 세 개의 테이블을 추가합니다.

(1) 사용자 table

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 '开放状态',
 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, '开发部'),
(2, '销售部'),
(3, '财务部');

3. project/Lib/Model

아래에 이 세 테이블의 기본 모델 Model을 생성합니다. 이 예제에서는 검증,

 <?php
  class UserModel extends Model {
  }
 ?>

와 같이 간단하게 테스트를 정의할 수 있는 만큼 실제로 뷰 모델에 해당하는 데이터 테이블이 반드시 해당 기본 모델을 가지고 있는 것은 아니지만, 두 테이블이 모두 하나의 테이블이 되도록 생성하는 것이 좋습니다. 그리고 뷰를 조작할 수 있습니다.

4. 뷰 모델을 생성합니다. 코드는 다음과 같습니다. 자세한 주석은 아래와 같습니다.

(참고: 최신 svn에는 동적 확장 모델 기능이 추가되었습니다. 새 버전을 사용하려면 protected 속성을 변경해야 합니다. 이 튜토리얼에서는 상속 방법 대신 동적 확장 기능을 사용하는 것이 좋습니다. )

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

위 코드는 다음과 같습니다.


코드 줄에서 보기 쿼리는 TP 버전 1.6부터 원래 Model 클래스에서 분리되었으므로 여기서는 가져오기 메서드를 사용하여 보기 모델 클래스를 도입해야 합니다.

코드의 세 번째 줄에서는 모델 이름을 UserViewModel로 정의합니다. Model 앞의 뷰 모델 이름은 다른 모델과 구별하기 위해 임의적입니다. 일반적으로 xxxViewModel과 같은 방식으로 이름을 지정합니다. 그리고 ViewModel을 상속받아야 합니다. (ThinkPHP 버전 1.6에서는 ViewModel을 상속하는 한 더 이상 모델의 viewModel 속성을 true로 설정할 필요가 없습니다.)

코드 4행의 $viewFields 속성은 뷰 모델에 포함된 필드를 나타냅니다. 각 데이터 테이블이나 모델에 필요한 필드입니다.

형식은

protected $viewFields = array(
    &#39;表名&#39;=>array(&#39;所需字段&#39;,&#39;_as&#39;=>&#39;别名定义&#39;,&#39;_on&#39;=>&#39;筛选条件&#39;,&#39;_type&#39;=>&#39;指定join类型,支持right,inner,left三种&#39;),
);

코드 7번째 줄의 'name' => 'dept'입니다. User 모델에 이미 name 필드가 있으므로 Dept 모델의 name 필드를 이런 방식으로 매핑합니다. . 필드가 여러 개인 경우 동일한 방법으로 추가할 수 있습니다.

정의가 완료된 후 Action에서 테스트해 보겠습니다. 코드는 다음과 같습니다.

<?php
class IndexAction extends Action{
  public function index(){
    $dao = D(&#39;UserView&#39;);
    $where[&#39;u.id&#39;] = 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 등 우리에게 익숙한 다양한 연산을 사용할 수 있습니다.

관련 권장 사항:

ThinkPHP의 동작 확장 및 플러그인

ThinkPHP 구현 업데이트 데이터 예제 자세한 설명(데모)

위 내용은 ThinkPHP 보기 쿼리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.