Cet article présente principalement la requête de vue ThinkPHP. Les amis qui en ont besoin peuvent s'y référer
La fonction d'application de requête de vue fournie par ThinkPHP est très puissante. Les utilisateurs peuvent utiliser la fonction de requête de vue pour trier le contenu des champs. plusieurs tables de données doivent être spécifiées et filtrées, organisées en un modèle de vue basé sur ces tables de données, puis des requêtes conjointes multi-tables peuvent être directement effectuées via le modèle, ce qui est très pratique et simple.
Par exemple, dans le projet, nous définissons trois tables :
table de base utilisateur utilisateur,
table de détails utilisateur user_info,
table de classification département département
Nous devons maintenant obtenir certaines informations utilisateur.
Ces informations doivent inclure le nom du compte de l'utilisateur, les informations associées et le nom du département
À ce stade, nous pouvons utiliser la requête de vue pour les traiter.
Ce qui suit est un exemple pour illustrer :
1. Construisez un nouveau projet et effectuez les configurations pertinentes (se référer au tutoriel précédent, omis ici)
Créez une base de données tpview, et ajoutez ceci Trois tableaux
(1) Tableau des utilisateurs
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) Informations utilisateur
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) Tableau de classification des départements
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 .Créez le modèle de base Model de ces trois tables sous project/Lib/Model
Cet exemple n'implique pas de vérification ni d'autres fonctions, vous pouvez donc simplement définir le test, tel que
<?php class UserModel extends Model { } ?>
En fait, le modèle de vue La table de données correspondante n'a pas nécessairement un modèle de base correspondant, mais il est recommandé de le créer afin que les tables simples et les vues puissent être exploitées.
4. Créez un modèle de vue. Le code est le suivant. Des annotations détaillées peuvent être trouvées ci-dessous :
(Remarque : le dernier svn a ajouté la fonction d'extension dynamique du modèle. À utiliser. la nouvelle version, vous devez remplacer l'attribut protégé par un attribut public. , il est recommandé d'utiliser la fonction d'expansion dynamique pour utiliser la requête de vue au lieu de la méthode d'héritage dans ce tutoriel )
<?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'), ); } ?>
. Le code ci-dessus est expliqué comme suit :
Dans la deuxième ligne de code, puisque la requête de vue a été séparée de la classe Model d'origine depuis la version 1.6 de TP, la classe de modèle de vue doit être introduite ici en utilisant l'importation méthode.
Dans la troisième ligne de code, le nom du modèle est défini comme UserViewModel. Le nom du modèle de vue avant Model est arbitraire, juste pour le distinguer des autres modèles. Habituellement, nous le nommerons ainsi. manière comme xxxViewModel . Et doit hériter de ViewModel. (ThinkPHP version 1.6 n'a plus besoin de définir l'attribut viewModel du modèle sur true, tant qu'il hérite de ViewModel)
L'attribut $viewFields de la ligne 4 du code représente les champs contenus dans le modèle de vue. Chaque élément définit chaque table de données ou champs requis par le modèle.
Le format est
protected $viewFields = array( '表名'=>array('所需字段','_as'=>'别名定义','_on'=>'筛选条件','_type'=>'指定join类型,支持right,inner,left三种'), );
Remarquez le 'name'=>'dept' dans la 7ème ligne de code, car il y a déjà un champ name dans le modèle User, nous utilisons donc cette méthode pour Le champ de nom du modèle Dept est mappé au champ dept. S'il existe plusieurs champs, ils peuvent être ajoutés de la même manière.
Une fois la définition terminée, nous la testons en Action. Le code est le suivant
<?php class IndexAction extends Action{ public function index(){ $dao = D('UserView'); $where['u.id'] = 1; dump($dao->where($where)->find()); dump($dao->getLastSql()); } } ?>
Accédez ensuite à l'opération et vous pouvez voir que nous avons obtenu avec succès le contenu de la requête requis :
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) "销售部" } }
Et vous pouvez voir que le SQL utilisé est le suivant
"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 "
Le modèle de requête du modèle de vue n'est pas très différent de la table unique ordinaire, et nous peut utiliser diverses opérations cohérentes que nous connaissons, comme l'ordre, la limite, etc.
Recommandations associées :
Extensions de comportement et plug-ins dans ThinkPHP
Explication détaillée de l'exemple de données de mise à jour de l'implémentation de ThinkPHP (démo )
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!