In diesem Artikel wird hauptsächlich die Ansichtsabfrage von ThinkPHP vorgestellt. Freunde, die sie benötigen, können darauf verweisen.
Die von ThinkPHP bereitgestellte Ansichtsabfragefunktion ist sehr leistungsfähig Mehrere Datentabellen müssen spezifiziert und gefiltert werden, basierend auf diesen Datentabellen in einem Ansichtsmodell organisiert werden, und dann können gemeinsame Abfragen mehrerer Tabellen direkt über das Modell durchgeführt werden, was sehr praktisch und einfach ist.
Zum Beispiel definieren wir im Projekt drei Tabellen:
Benutzer-Benutzer-Basistabelle,
user_info-Benutzerdetailtabelle,
dept-Abteilungsklassifizierungstabelle
Jetzt müssen wir bestimmte Benutzerinformationen abrufen.
Diese Informationen sollten den Kontonamen des Benutzers, zugehörige Informationen und den Namen der Abteilung enthalten.
Zu diesem Zeitpunkt können wir sie mit der Ansichtsabfrage verarbeiten.
Das Folgende ist ein Beispiel zur Veranschaulichung:
1 Erstellen Sie ein neues Projekt und führen Sie entsprechende Konfigurationen durch (siehe vorheriges Tutorial, das hier weggelassen wurde)
2. und fügen Sie diese drei Tabellen hinzu
(1) Benutzertabelle
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) Benutzerinformationen
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) Abteilungsklassifizierungstabelle
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. Im Projekt/ Lib/ Erstellen Sie das Basismodell Modell
für diese drei Tabellen unter Modell. Dieses Beispiel beinhaltet keine Überprüfung und andere Funktionen, sodass Sie einfach den Test definieren können, z. B.
<?php class UserModel extends Model { } ?>
Die dem Ansichtsmodell entsprechende Tabelle muss nicht unbedingt ein entsprechendes Basismodell sein. Es wird jedoch empfohlen, sie so zu erstellen, dass sowohl einzelne Tabellen als auch Ansichten funktionieren können.
4. Erstellen Sie ein Ansichtsmodell. Der Code lautet wie folgt. Detaillierte Anmerkungen werden unten angezeigt:
(Hinweis: Die neueste SVN hat die Funktion zum dynamischen Erweitern des Modells hinzugefügt. Um die zu verwenden In der neuen Version müssen Sie das geschützte Attribut in ein öffentliches Attribut ändern. In diesem Tutorial wird empfohlen, die dynamische Erweiterungsfunktion zu verwenden, um die Ansichtsabfrage anstelle der Vererbungsmethode zu verwenden.)
<?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'), ); } ?>
Der obige Code wird erklärt wie folgt:
In Kapitel 2. Da in der Codezeile die Ansichtsabfrage seit TP-Version 1.6 von der ursprünglichen Modellklasse getrennt wurde, muss hier die Ansichtsmodellklasse mithilfe der Importmethode eingeführt werden.
In der dritten Codezeile wird der Name des Modells als UserViewModel definiert. Der Name des Ansichtsmodells vor Model ist willkürlich, nur um es von anderen Modellen zu unterscheiden Art und Weise als xxxViewModel . Und muss ViewModel erben. (ThinkPHP Version 1.6 muss das viewModel-Attribut des Modells nicht mehr auf true setzen, solange es ViewModel erbt)
Das $viewFields-Attribut in Zeile 4 des Codes stellt die im Ansichtsmodell enthaltenen Felder dar. Jedes Element definiert jede vom Modell benötigte Datentabelle oder jedes Feld.
Das Format ist
protected $viewFields = array( '表名'=>array('所需字段','_as'=>'别名定义','_on'=>'筛选条件','_type'=>'指定join类型,支持right,inner,left三种'), );
Beachten Sie das „name“=>„dept“ in der 7. Codezeile. Da es im Benutzermodell bereits ein Namensfeld gibt, verwenden wir diese Methode zum Konvertieren Abteilungsmodell Das Namensfeld wird dem Abteilungsfeld zugeordnet. Wenn mehrere Felder vorhanden sind, können diese auf die gleiche Weise hinzugefügt werden. Nachdem
definiert ist, testen wir es in Aktion. Der Code lautet wie folgt:
<?php class IndexAction extends Action{ public function index(){ $dao = D('UserView'); $where['u.id'] = 1; dump($dao->where($where)->find()); dump($dao->getLastSql()); } } ?>
Greifen Sie dann auf den Vorgang zu und Sie können sehen, dass wir den erforderlichen Abfrageinhalt erfolgreich erhalten haben:
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) "销售部" } }
Und Sie können sehen, dass das verwendete SQL wie folgt ist
"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 "
Das Abfragemodell des Ansichtsmodells unterscheidet sich nicht wesentlich von der gewöhnlichen Einzeltabelle. Sie können verschiedene kohärente Operationen verwenden, die wir kennen mit, wie Bestellung, Limit usw.
Verwandte Empfehlungen:
Verhaltenserweiterungen und Plug-Ins in ThinkPHP
Beispiel für ThinkPHP-Implementierungsaktualisierungsdaten, ausführliche Erklärung (Demo). )
Das obige ist der detaillierte Inhalt vonThinkPHP-Ansichtsabfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!