Heim > PHP-Framework > Denken Sie an PHP > ThinkPHP: Korrekte Verwendung von DB-Klassen und -Modellen

ThinkPHP: Korrekte Verwendung von DB-Klassen und -Modellen

爱喝马黛茶的安东尼
Freigeben: 2019-12-16 16:40:50
nach vorne
7310 Leute haben es durchsucht

ThinkPHP: Korrekte Verwendung von DB-Klassen und -Modellen

Ich habe festgestellt, dass viele Entwickler die korrekte Verwendungshaltung von Db und Modell bei der Verwendung von ThinkPHP5.* nicht verstehen, insbesondere in Version 5.1. Wenn Sie nicht die folgende korrekte Haltung verwenden, gibt es Es ist sehr wahrscheinlich, dass Sie in eine Falle tappen.

Die richtige Haltung von Db

Das Folgende ist die offiziell empfohlene Verwendung der Db-Klasse (dh jedes Mal statische Methodenaufrufe)

// 查询单个数据
Db::name('user')->where('id', 1)->find();
// 查询多个数据
Db::name('user')->where('id', '>', 1)->select();
// 写入新的数据
Db::name('user')->insert(['name' => '张三']);
// 更新数据
Db::name('user')->where('id', 1)->update(['name' => '李四']);
// 删除数据
Db::name('user')->delete(1);
Nach dem Login kopieren

Viele Entwickler Um den Code zu vereinfachen, verwenden Leser gerne den folgenden Code.

Verwenden Sie jedoch niemals den folgenden Code in 5.1!

// 错误的用法

$user = Db::name('user');
// 查询单个数据
$user->where('id', 1)->find();
// 查询多个数据
$user->where('id', '>', 1)->select();
// 写入新的数据
$user->insert(['name' => '张三']);
// 更新数据
$user->update(['name' => '李四']);
// 删除数据
$user->delete(1);
Nach dem Login kopieren

Selbst die Nutzung der Hilfsfunktion ist immer noch nicht zu empfehlen!

// 仍然是错误的用法

// 查询单个数据
db('user')->where('id', 1)->find();
// 查询多个数据
db('user')->where('id', '>', 1)->select();
// 写入新的数据
db('user')->insert(['name' => '张三']);
// 更新数据
db('user')->update(['name' => '李四']);
// 删除数据
db('user')->delete(1);
Nach dem Login kopieren

Viele Entwickler fragen sich vielleicht, warum es eine falsche Verwendung ist? Die Ergebnisse, die ich verwendet habe, sind offensichtlich in Ordnung, oder? Das bedeutet nur, dass Sie noch nicht in die Falle getappt sind.

Der wahre Grund ist, dass Version 5.1 die vorherigen Abfragebedingungen nicht nach jeder Abfrage löscht (5.0 löscht sie jedes Mal), sodass die folgende Verwendung gültig ist.

$user = Db::name('user');
// 查询分数大于80分的用户总数
$count = $user->where('score', '>', 80)->count();
// 查询分数大于80分的用户数据
$user->select();
Nach dem Login kopieren

Nachdem Sie dies gesehen haben, sollten Sie verstehen, dass bei Verwendung derselben Datenbankabfrageobjektinstanz die Abfragebedingungen immer beibehalten werden (das heißt, es führt zu Verwirrung bei nachfolgenden Abfragebedingungen), und wenn Sie mehrere Vorgänge ausführen Wenn Sie Hilfsfunktionen oder manuelle Instanziierung verwenden, handelt es sich um dieselbe Objektinstanz, es sei denn, Sie löschen sie manuell wie unten beschrieben.

$user = Db::name('user');
// 查询分数大于80分的用户总数
$count = $user->where('score', '>', 80)->count();
// 清除查询条件(但不包括排序或者字段等信息)
$user->removeOption('where');
// 查询所有用户数据 并按分数倒序排列 
$user->order('score', 'desc')->select();
// 清除所有查询条件
$user->removeOption();
// 查询分数等于100的用户
$user->where('score', 100)->select();
Nach dem Login kopieren

Best Practice: Verwenden Sie jedes Mal eine neue statische Db-Abfrage

Korrekte Haltung des Modells

Design des Modell Tatsächlich besteht, genau wie bei Db, grundsätzlich keine Notwendigkeit, es manuell zu instanziieren.

// 写入新的数据
$user = User::create(['name' => '张三']);
// 更新数据
$user->update(['name' => '李四']);

// 查询单个数据
$user = User::get(1);
// 删除当前模型数据
$user->delete();
Nach dem Login kopieren

Im obigen Code verwenden wir keinen Instanziierungscode, wir verwenden alle statische Methodenoperationen. Die Instanziierung des Modells wird vom System beim Abfragen oder Schreiben von Daten automatisch abgeschlossen. Wenn Sie das Modell manuell selbst instanziieren, entstehen Kosten für die wiederholte Instanziierung des Modells.

Nicht empfohlene Verwendung:

$user = new User;
// 写入新的数据
$user->name = '张三';
$user->save();
Nach dem Login kopieren
$user = new User;
$user->find(1);
echo $user->name;
Nach dem Login kopieren

Empfohlene Verwendung:

// 写入新的数据
User::create(['name' => '张三']);
$user = User::get(1);
echo $user->name;
Nach dem Login kopieren

Instanziieren Sie das Modell daher bitte nicht manuell und es wird nicht empfohlen, die Modellhilfsfunktion zu verwenden.

Best Practice: Verwenden Sie statische Methoden sowohl für die Modellabfrage als auch für die Modellerstellung

Verstehen Sie nun die richtige Haltung für die Verwendung von DB-Klassen und -Modellen?

Die chinesische PHP-Website bietet eine große Anzahl kostenloser ThinkPHP-Einführungs-Tutorials, zum Lernen ist jeder herzlich willkommen!

Dieser Artikel wurde reproduziert von: https://blog.thinkphp.cn/810719

Das obige ist der detaillierte Inhalt vonThinkPHP: Korrekte Verwendung von DB-Klassen und -Modellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:thinkphp.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