Heim  >  Artikel  >  PHP-Framework  >  Was ist Orm in Thinkphp?

Was ist Orm in Thinkphp?

青灯夜游
青灯夜游Original
2022-02-14 17:04:064161Durchsuche

ORM bezieht sich in thinkphp auf „Object Relational Mapping“, eine Speicherzugriffsschicht, die entwickelt wurde, um Entwicklern die Verwendung von Datenbanken zu erleichtern. Der Hauptzweck von ORM besteht darin, durch das Objektmodell dargestellte Objekte der SQL-basierten relationalen Modelldatenbank zuzuordnen Struktur Geh hinein.

Was ist Orm in Thinkphp?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, Thinkphp v5.1-Version, Dell G3-Computer.

orm in thinkphp

ORMs vollständiger Name ist Object Relational Mapping, also objektrelationale Zuordnung

  • O (Objekt)-Objekt, das die Entität im Projekt ist, genauer gesagt die Daten Modell, das heißt Man kann sagen, dass es sich um eine Persistenzklasse handelt.

  • R (Relation) Relationale Daten

  • M (Mapping) Mapping, der Prozess der Zuordnung von Objekten zu relationalen Daten und der Zuordnung relationaler Daten zu Objekten.

Ein intuitiveres Verständnis ist, dass ORM OOP-Denken verwendet, um SQL-Anweisungen zum Hinzufügen, Löschen, Ändern und Abfragen zu generieren.

ORM von ThinkPHP ist eine Speicherzugriffsschicht, die entwickelt wurde, um Entwicklern die Verwendung von Datenbanken zu erleichtern. Das Bild des Framework-Designs ist wie folgt:

Was ist Orm in Thinkphp?

Der Hauptzweck besteht darin, durch das Objektmodell dargestellte Objekte der Datenbankstruktur des relationalen Modells zuzuordnen SQL.

Beim Ändern der Eigenschaften des Objekts selbst oder beim Aufrufen der Methode des Objekts erfolgt die entsprechende Ausführung bestimmter SQL-Anweisungen.

Auf diese Weise können Leute, die Code schreiben, Geschäftslogik besser schreiben, anstatt wiederholt SQL-Anweisungen zum Hinzufügen, Löschen, Ändern und Abfragen zu schreiben.

Verwendungsbeispiele in thinkphp

Es gibt zwei Module für Datenbankoperationen im TP-Framework:

  • Datenbank

  • Modell

Datenbankmodul in TP

Zitieren Sie ein Dokument Funktionsbeschreibung

ist unterteilt in Verbindung (Connector)/Abfrage (Abfrage)/Builder (SQL-Generator)

  • Der Verbindungsconnector wird hauptsächlich zum Herstellen einer Verbindung mit der Datenbank verwendet, und verschiedene Treiber können zum Verbinden verschiedener Typen verwendet werden Datenbank.

  • Abfrage wird verwendet, um SQL-Anweisungen auszuführen, die Ergebnisse zu verarbeiten und sie dem Datensatz zuzuordnen.

  • Der Builder-Generator wird verwendet, um die Bedingungen, Sortierungen usw., die wir übergeben, in SQL-Anweisungen umzuwandeln.

In diesen drei Schritten können wir erkennen, dass es sich bei einer abstrakten Zuordnung von ORM-Ideen nur um das Abfrage-Abfragemodul handeln kann, wir können jedoch die Beschreibung des Datensatzes im TP-Dokument sorgfältig prüfen.

Es geht mehr darum, Datenverarbeitungsmethoden zu kapseln und bereitzustellen, wie zum Beispiel:

(Das Folgende ist ein kleiner Teil, der aus dem Dokument kopiert wurde)

toArray     将数据集的数据转为数组
merge   合并其它数据
diff    比较数组,返回差集
flip    交换数据中的键和值
intersect   比较数组,返回交集
keys    返回数据中的所有键名
pop 删除数据中的最后一个元素
shift   删除数据中的第一个元素
unshift 在数据开头插入一个元素
reduce  通过使用用户自定义函数,以字符串返回数组

Aber es werden keine umgekehrten Zuordnungsoperationen bereitgestellt, beispielsweise wenn wir Datensätze bearbeiten , Daten in der Datenbank automatisch aktualisieren.

Nach meinem Verständnis gibt es im Datenbankmodul nicht viele ORM-Ideen. Der Schlüssel liegt darin, das Modell zu verstehen und anzuwenden.

Das Modell in tp

Definieren Sie die Modelldatei Das erste Kapitel im Dokument enthält etwas mehr Inhalt im Abschnitt zur Modellinitialisierung. Dies soll hervorheben, dass das Modell viele Funktionen ausführen kann. Dies ist auch der Grund für die Entstehung von ORM: die abstrakte Zuordnung der SQL-Ausführung zu Objekten in der objektorientierten Programmierung.

Wir können es so verstehen: Eine Datenzeile in der Tabelle stellt ein neues Objekt in unserem Code dar. Wenn das Objekt geändert wird, wird die entsprechende Zeile in der Tabelle automatisch aktualisiert.

Verwendung des Modells

Der gezeigte Code ist relativ einfach, kann aber tatsächlich sehr flexibel seinZum Beispiel Abfragen mit Nicht-Primärschlüsselbedingungen, Abfragen mehrerer Datensatzzeilen usw.

namespace app\index\model;

use think\Model;

// 设置类名 需要遵循转换规则,蛇形转为大驼峰
class User extends Model
{
    // 设置主键字段名
    protected $pk = 'u_id';

    // 开启自动维护时间戳字段 (什么时间插入 什么时间更新)
    protected $autoWriteTimestamp = true;

    // 软删除 开启之后 删除数据只是用一个字段来标识为删除状态 方便查询、备份等
    use SoftDelete;
    protected $deleteTime = 'delete_time';

}

Missverständnis

Ich habe es gesehen. Nach der Verwendung beginnen viele Anfänger mit dem Schreiben von Code, verwenden ihn jedoch falsch. ① Das Modell sollte nur für die DB-Klasse verwendet werden

Obwohl das Modell als Obermenge der DB-Klasse betrachtet werden kann, wird es nicht mit ORM-Ideen geschrieben, wenn es nur als einfache DB-Klasse verwendet wird. Dann besteht keine Notwendigkeit, es zu verwenden. .

Wenn Sie es falsch anwenden, werden Sie nicht nur Ihre Effizienz nicht verbessern können, sondern es wird sich sogar negativ auf Sie auswirken. (Zum Beispiel sind Codespezifikationen nicht einheitlich, neue Tabellen müssen mit entsprechenden Modelldateien hinzugefügt werden usw.)

Codedemonstration:

<?php
// *******快速查询、更新*******
// 查询主键=1的数据
$user = User::get(1);
// 然后更改它的name字段为新的值
$user->name = &#39;thinkphp&#39;;
// 保存,自己去数据库给我更新吧~
$user->save();

// *******插入新的一行数据*******
// 新建一个对象(相对应的操作就是新创建一行)
$user = new User;
// 设置字段的值  有多个字段就多个设置
$user->name= &#39;thinkphp&#39;;
// 保存,自己去插入吧~
$user->save();

Wenn Sie das sehen, halten Sie inne und denken Sie darüber nach. . Hat Ihr Code jemals so ausgesehen?

Ich glaube, manche Leute benutzen es immer noch so! Weil ich es früher so benutzt habe.

Dann werfen wir einen Blick auf die richtige Art und Weise, es zu verwenden (meiner Meinung nach, wenn Sie es für falsch halten oder ein besseres haben, kommentieren Sie es bitte und tauschen Sie es aus)

<?php
$userModel = new User(); // 这里就相当于初始化Db类
$userOneInfo = $userModel->where([&#39;u_id&#39; => 1])->find();

$userTwoInfo = $userModel->where([&#39;u_id&#39; => 2])->find();
// ... 执行其他逻辑 比如判断上下级 操作权限等等

// 业务需求不只是读取用户的数据这么简单
// 还要扣除余额(就是更新数据库)
$userOneRes = $userModel->where([&#39;u_id&#39; => 1])->update([&#39;u_balance&#39; => &#39;xxxx&#39;]);

// ... 执行其他逻辑

Da ein Objekt ein Datenelement abbildet, arbeiten wir Daten mit der gleichen Where-Bedingung und direktem Betrieb des Objekts sind ausreichend. Es besteht keine Notwendigkeit, wiederholt zu schreiben, wo u_id = 1 zum Aktualisieren und u_id = 1 zum Löschen ist

Mit dem Modell gibt es viele Verwendungsmöglichkeiten (dank des Engagements des Open-Source-Teams, das eine große Anzahl von Funktionen für uns gekapselt hat). )

Zum Beispiel:

– Wenn der Benutzertabelle ein neues Datenelement hinzugefügt wird, muss eine andere Tochtertabelle ebenfalls eine Zeile mit der Benutzer-ID initialisieren.

– Konvertieren Sie das Datenformat automatisch (speichern Sie den Zeitstempel und die Abfrage erfolgt im Format 2019-7-13 19:53:04).

– Daten automatisch überprüfen und Daten automatisch vervollständigen (die IP-Berechtigungen des Betreibers usw. werden während des Betriebs standardmäßig gespeichert).

– Assoziationsabfrage (eine sehr leistungsstarke Funktion in TP. Die Beziehung zu einem anderen Modell wird im Modell definiert. Beispielsweise kann die u_id in der Store-Tabelle verwendet werden, um die Informationen des Benutzers abzufragen, der zum Store gehört. Es entspricht der Zuordnung zwischen dem Geschäftsmodell und dem Benutzermodell. Die automatische Zusammenführung von Join-Daten wird zur Verwendung an uns zurückgegeben (Datenbank-Objekt-Zuordnung) ORM abstrahiert die Operation von Daten als Operationen für Objekte. Lernen Sie, Ihre Denkweise zu ändern, die vom Framework bereitgestellten Funktionen sinnvoll zu nutzen und besseren Code zu schreiben. Das Modell in TP ist sehr leistungsfähig und enthält viel Logik.

【Verwandte Tutorial-Empfehlung:

Thinkphp Framework

Das obige ist der detaillierte Inhalt vonWas ist Orm in Thinkphp?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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