이 글은 주로 ThinkPHP 뷰 쿼리를 소개합니다. 필요하신 분들은 참고하시면 됩니다
ThinkPHP에서 제공하는 뷰 쿼리 응용 기능은 매우 강력합니다. 사용자는 뷰 쿼리 기능을 사용하여 여러 데이터 테이블의 필드 내용을 다음과 같이 지정하고 필터링할 수 있습니다. 이러한 데이터 테이블을 기반으로 뷰 모델로 구성하면 이 모델을 통해 다중 테이블 조인트 쿼리를 직접 수행할 수 있어 매우 편리하고 간단합니다.
예를 들어 프로젝트에서는 세 개의 테이블을 정의합니다.
user 계정 이름, 관련 정보
이때 조회 쿼리를 이용하여 처리할 수 있습니다.
1. 새 프로젝트를 빌드하고 관련 구성을 수행합니다(이전 튜토리얼 참조, 여기에서는 생략됨)
2. 데이터베이스 tpview를 생성하고 다음 세 개의 테이블을 추가합니다.
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');
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. 뷰 모델을 생성합니다. 코드는 다음과 같습니다. 자세한 주석은 아래와 같습니다.
<?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'), ); } ?>위 코드는 다음과 같습니다.
코드 줄에서 보기 쿼리는 TP 버전 1.6부터 원래 Model 클래스에서 분리되었으므로 여기서는 가져오기 메서드를 사용하여 보기 모델 클래스를 도입해야 합니다.
형식은
protected $viewFields = array( '表名'=>array('所需字段','_as'=>'别名定义','_on'=>'筛选条件','_type'=>'指定join类型,支持right,inner,left三种'), );
코드 7번째 줄의 'name' => 'dept'입니다. User 모델에 이미 name 필드가 있으므로 Dept 모델의 name 필드를 이런 방식으로 매핑합니다. . 필드가 여러 개인 경우 동일한 방법으로 추가할 수 있습니다.
정의가 완료된 후 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 등 우리에게 익숙한 다양한 연산을 사용할 수 있습니다.
관련 권장 사항:
ThinkPHP의 동작 확장 및 플러그인
ThinkPHP 구현 업데이트 데이터 예제 자세한 설명(데모)
위 내용은 ThinkPHP 보기 쿼리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!