ThinkPHP-Ansichtsabfrage

不言
Freigeben: 2023-03-30 08:30:02
Original
1791 Leute haben es durchsucht

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);
Nach dem Login kopieren

(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');
Nach dem Login kopieren

(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, '财务部');
Nach dem Login kopieren

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 {
  }
 ?>
Nach dem Login kopieren

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(&#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;),
  );
}
?>
Nach dem Login kopieren

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(
    &#39;表名&#39;=>array(&#39;所需字段&#39;,&#39;_as&#39;=>&#39;别名定义&#39;,&#39;_on&#39;=>&#39;筛选条件&#39;,&#39;_type&#39;=>&#39;指定join类型,支持right,inner,left三种&#39;),
);
Nach dem Login kopieren

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(&#39;UserView&#39;);
    $where[&#39;u.id&#39;] = 1;
    dump($dao->where($where)->find());
    dump($dao->getLastSql());
  }
}
?>
Nach dem Login kopieren

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) "销售部"
 }
}
Nach dem Login kopieren

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 "
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!