Heim >PHP-Framework >Denken Sie an PHP >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);
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);
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);
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();
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();
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();
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();
$user = new User; $user->find(1); echo $user->name;
Empfohlene Verwendung:
// 写入新的数据 User::create(['name' => '张三']); $user = User::get(1); echo $user->name;
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!