Heim PHP-Framework Denken Sie an PHP ThinkPHP: Das dritte von drei leistungsstarken Tools für Modelle (Getter)

ThinkPHP: Das dritte von drei leistungsstarken Tools für Modelle (Getter)

Dec 16, 2019 pm 05:17 PM
thinkphp 模型 Getter

ThinkPHP: Das dritte von drei leistungsstarken Tools für Modelle (Getter)

Definieren Sie den Getter

Die Funktion des Getters besteht darin, die (Roh-)Daten des Modells automatisch zu verarbeiten Objekt. Ein Getter entspricht einer speziellen Methode des Modells (die Methode muss vom öffentlichen Typ sein:

getFieldNameAttr

FieldName ist die Kamel-Schreibweise). Konvertierung des Datentabellenfelds Oder eines Felds, das in Ihrer Datentabelle nicht vorhanden ist (Achten Sie darauf, den folgenden Satz zu verstehen. Das Folgende ist eine typische Getter-Definition:

<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
    public function getUserTypeAttr($value, $data)
    {
        $type = [0 => &#39;普通&#39;, 1 => &#39;VIP&#39;, 2 => &#39;黄金&#39;, 3 => &#39;白金&#39;, 4 => &#39;钻石&#39;];
        return $type[$value];
    }
}
Nach dem Login kopieren

Sie müssen einen entsprechenden Getter definieren). Jedes Datenfeld, das eine Ausgabekonvertierung erfordert, muss jedoch nicht mit dem Feldnamen der Datentabelle übereinstimmen. Wenn ich beispielsweise einen Getter mit dem Namen getTypeAttr für das Feld user_type definieren möchte, ist dies der Fall Dies ist ebenfalls zulässig, es ist jedoch zu beachten, dass der erste Parameter zu diesem Zeitpunkt an den Getter übergeben wird. Der Parameter darf keinen Wert haben (da keine entsprechenden Datentabellenfelddaten vorhanden sind) und Sie können die benötigten Daten nur über den zweiten Parameter abrufen .

<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
    public function getTypeAttr($value, $data)
    {
        $type = [0 => &#39;普通&#39;, 1 => &#39;VIP&#39;, 2 => &#39;黄金&#39;, 3 => &#39;白金&#39;, 4 => &#39;钻石&#39;];
        return $type[$data[&#39;user_type&#39;]];
    }
}
Nach dem Login kopieren

Natürlich müssen Sie in strengeren Fällen auch feststellen, ob $data['user_type'] vorhanden ist, was vorerst übersprungen wird.

Beachten Sie, dass die Daten des zweiten Parameters möglicherweise vom Getter selbst verarbeitet wurden (sofern Sie den entsprechenden Getter definieren).

Warum einen Getter definieren, der nicht mit dem Datagrammfeld übereinstimmt? Der offensichtlichste Vorteil ist die Möglichkeit, zwischen verschiedenen Feldern zu unterscheiden, um Rohdaten und verarbeitete Daten zu erhalten. Tatsächlich gibt es viele Gründe dafür, einige Feld-Getter zu definieren, die in der Datentabelle nicht vorhanden sind. Das ist genau das, was den Charme von Gettern ausmacht.

Es ist ersichtlich, dass die Definition des Getters selbst nicht schwierig ist. Der Schlüssel liegt in der Erfassungslogik in der Methode, die in praktischen Anwendungen am wichtigsten ist.

Getter aufrufen

Nachdem der Getter definiert wurde, wird er in den folgenden Situationen automatisch ausgelöst:

·Die Datenobjektwertoperation des Modells (z. B. $model->field_name);

·Die serialisierte Ausgabeoperation des Modells (wie $model-> toArray() oder toJson());

·Rufen Sie explizit die getAttr-Methode auf (wie $model->getAttr ('field_name'));

Die ersten beiden werden tatsächlich durch den Aufruf des letzten implementiert. Das Wichtigste ist, den ersten zu verstehen. Der Wert eines Modellobjekts wird im Allgemeinen auf folgende Weise ermittelt:

$user = User::get(1);
echo $user->name;
echo $user->user_type;
Nach dem Login kopieren

Wenn wir die obige Methode verwenden, um Modellobjektdaten abzurufen oder die Vorlage auszugeben, werden wir die Daten tatsächlich in der folgenden Reihenfolge erkennen und abrufen. .

·Schritt 1 – Wenn das Abfrageergebnis die Felddaten enthält, rufen Sie die Originaldaten ab, andernfalls fahren Sie mit Schritt 2 fort;

·Schritt 2 – Überprüfen Sie, ob der Getter (einschließlich dynamischer Getter) für dieses Feld definiert ist. Wenn nicht, fahren Sie mit Schritt 3 fort >

·Schritt 3 – Überprüfen Sie, ob die Feldtypkonvertierung definiert ist. Wenn ja, führen Sie die Konvertierungsverarbeitung durch und geben Sie das Ergebnis zurück. Wenn nicht, fahren Sie mit Schritt 4 fort;

·Schritt 4 – Wenn es sich um ein Systemzeitfeld handelt, formatieren Sie die Zeit automatisch und geben Sie das Ergebnis zurück, andernfalls fahren Sie mit Schritt 5 fort; 🎜>·

Schritt 5 – Wenn die Felddaten nicht in der Prüfung in Schritt 1 enthalten sind, prüfen Sie, ob eine zugehörige Attributdefinition vorhanden ist, und wenn ja, beziehen Sie die Daten über die zugehörige Beziehung und Gibt das Ergebnis zurück, andernfalls wird eine nicht definierte Eigenschaftsausnahme ausgelöst. Für den detaillierten Code der oben genannten fünf Schritte können Sie bei Interesse direkt auf den getAttr-Methodencode von thinkmodelconcernAttribute verweisen.

Einfach ausgedrückt: Wenn Sie $user->user_type erhalten, prüfen Sie, ob der entsprechende Getter definiert ist, unabhängig davon, ob das Feld user_type ein echtes Datentabellenfeld ist.

Aber in vielen Fällen erhalten Sie die Modelldaten nicht einzeln, sondern geben die gesamten Modelldaten an den Client oder die Vorlage zurück.
public function index()
{
    $user = User::get(1);
    return json($user);
}
Nach dem Login kopieren

In diesem Fall wird die toJson-Verarbeitung des Modells tatsächlich durchgeführt, wenn auf die Ausgabe reagiert wird.

Ein wichtiger Punkt ist, dass, wenn Ihr Getter Felder definiert, die keine Datentabellen sind, diese nicht automatisch ausgegeben werden. Sie müssen zusätzliche Attribute über die Append-Methode hinzufügen (und das Anhängen zugehöriger Modellattribute unterstützen).

Wenn wir einen Getter für das Typattribut definieren (vorausgesetzt, es handelt sich nicht um ein echtes Datentabellenfeld), müssen Sie für die normale Ausgabe die folgende Methode verwenden (andernfalls haben Sie möglicherweise nur Benutzertypdaten):

public function index()
{
    $user = User::get(1);
    return json($user->append([&#39;type&#39;]));
}
Nach dem Login kopieren

Wenn Sie toArray verwenden, ist die Verarbeitungsmethode dieselbe.

Wenn es sich um eine Datensatzabfrage handelt, können Sie auch die Append-Methode verwenden, um zusätzliche Felder einheitlich anzuhängen.

public function index()
{
    $users = User::all();
    return json($users->append([&#39;type&#39;]));
}
Nach dem Login kopieren

Zusätzlich zur Append-Methode unterstützen wir auch die Hidden-Methode, um einige Daten vorübergehend auszublenden.

Rohdaten abrufen

有些情况下,除了要获取处理过的数据外,还需要获取原始数据以便应对不同的需求。

如果你的获取器都是用的区分于实际数据表字段的额外属性字段,那么这个问题本身已经解决了。所以我们主要讨论的是当你的获取器属性和数据表字段一致的情况下,该如何获取原始数据。

一个最简单的办法是使用getData方法:

$user = User::get(1);
// 获取user_type获取器数据
echo $user->user_type;
// 获取原始的user_type数据
echo $user->getData(&#39;user_type&#39;);
// 获取全部原始数据
dump($user->getData());
Nach dem Login kopieren

动态获取器

前面我们提到过动态获取器的概念,动态获取器就是不需要在模型类里面定义获取器方法,而是在查询的时候使用闭包来定义一个字段的获取器对数据进行统一的处理。

User::withAttr(&#39;name&#39;, function($value, $data) {
return strtolower($value);
})->select();
Nach dem Login kopieren

如果你需要定义多个动态获取器,多次调用withAttr方法就行。

动态获取器的意义除了可以不用在模型里面定义获取器方法之外,还可以起到覆盖已经定义的获取器的作用,并且动态获取器可以支持Db类操作,弥补了Db操作不能使用获取器的缺憾,具体就看自己的需求来选择了。

Db::name(&#39;user&#39;)->withAttr(&#39;name&#39;, function($value, $data) {
return strtolower($value);
})->select();
Nach dem Login kopieren

总结

无论是获取器,还是之前提的修改器、搜索器,其作用无非是把你的模型工作细化和拆分,这样代码和逻辑也会更清晰,可维护性也大大增强,至于性能,从来不是模型首先考虑的。

PHP中文网,有大量免费的ThinkPHP入门教程,欢迎大家学习!

本文转自:https://blog.thinkphp.cn/825350

Das obige ist der detaillierte Inhalt vonThinkPHP: Das dritte von drei leistungsstarken Tools für Modelle (Getter). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Das weltweit leistungsstärkste Open-Source-MoE-Modell ist da, mit chinesischen Fähigkeiten, die mit GPT-4 vergleichbar sind, und der Preis beträgt nur fast ein Prozent von GPT-4-Turbo Das weltweit leistungsstärkste Open-Source-MoE-Modell ist da, mit chinesischen Fähigkeiten, die mit GPT-4 vergleichbar sind, und der Preis beträgt nur fast ein Prozent von GPT-4-Turbo May 07, 2024 pm 04:13 PM

Stellen Sie sich ein Modell der künstlichen Intelligenz vor, das nicht nur die Fähigkeit besitzt, die traditionelle Datenverarbeitung zu übertreffen, sondern auch eine effizientere Leistung zu geringeren Kosten erzielt. Dies ist keine Science-Fiction, DeepSeek-V2[1], das weltweit leistungsstärkste Open-Source-MoE-Modell, ist da. DeepSeek-V2 ist ein leistungsstarkes MoE-Sprachmodell (Mix of Experts) mit den Merkmalen eines wirtschaftlichen Trainings und einer effizienten Inferenz. Es besteht aus 236B Parametern, von denen 21B zur Aktivierung jedes Markers verwendet werden. Im Vergleich zu DeepSeek67B bietet DeepSeek-V2 eine stärkere Leistung, spart gleichzeitig 42,5 % der Trainingskosten, reduziert den KV-Cache um 93,3 % und erhöht den maximalen Generierungsdurchsatz auf das 5,76-fache. DeepSeek ist ein Unternehmen, das sich mit allgemeiner künstlicher Intelligenz beschäftigt

Hallo, elektrischer Atlas! Der Boston Dynamics-Roboter erwacht wieder zum Leben, seltsame 180-Grad-Bewegungen machen Musk Angst Hallo, elektrischer Atlas! Der Boston Dynamics-Roboter erwacht wieder zum Leben, seltsame 180-Grad-Bewegungen machen Musk Angst Apr 18, 2024 pm 07:58 PM

Boston Dynamics Atlas tritt offiziell in die Ära der Elektroroboter ein! Gestern hat sich der hydraulische Atlas einfach „unter Tränen“ von der Bühne der Geschichte zurückgezogen. Heute gab Boston Dynamics bekannt, dass der elektrische Atlas im Einsatz ist. Es scheint, dass Boston Dynamics im Bereich kommerzieller humanoider Roboter entschlossen ist, mit Tesla zu konkurrieren. Nach der Veröffentlichung des neuen Videos wurde es innerhalb von nur zehn Stunden bereits von mehr als einer Million Menschen angesehen. Die alten Leute gehen und neue Rollen entstehen. Das ist eine historische Notwendigkeit. Es besteht kein Zweifel, dass dieses Jahr das explosive Jahr der humanoiden Roboter ist. Netizens kommentierten: Die Weiterentwicklung der Roboter hat dazu geführt, dass die diesjährige Eröffnungsfeier wie Menschen aussieht, und der Freiheitsgrad ist weitaus größer als der von Menschen. Aber ist das wirklich kein Horrorfilm? Zu Beginn des Videos liegt Atlas ruhig auf dem Boden, scheinbar auf dem Rücken. Was folgt, ist atemberaubend

KAN, das MLP ersetzt, wurde durch Open-Source-Projekte auf Faltung erweitert KAN, das MLP ersetzt, wurde durch Open-Source-Projekte auf Faltung erweitert Jun 01, 2024 pm 10:03 PM

Anfang dieses Monats schlugen Forscher des MIT und anderer Institutionen eine vielversprechende Alternative zu MLP vor – KAN. KAN übertrifft MLP in Bezug auf Genauigkeit und Interpretierbarkeit. Und es kann MLP, das mit einer größeren Anzahl von Parametern ausgeführt wird, mit einer sehr kleinen Anzahl von Parametern übertreffen. Beispielsweise gaben die Autoren an, dass sie KAN nutzten, um die Ergebnisse von DeepMind mit einem kleineren Netzwerk und einem höheren Automatisierungsgrad zu reproduzieren. Konkret verfügt DeepMinds MLP über etwa 300.000 Parameter, während KAN nur etwa 200 Parameter hat. KAN hat eine starke mathematische Grundlage wie MLP und basiert auf dem universellen Approximationssatz, während KAN auf dem Kolmogorov-Arnold-Darstellungssatz basiert. Wie in der folgenden Abbildung gezeigt, hat KAN

Es gibt mehrere Versionen von thinkphp Es gibt mehrere Versionen von thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP verfügt über mehrere Versionen, die für verschiedene PHP-Versionen entwickelt wurden. Zu den Hauptversionen gehören 3.2, 5.0, 5.1 und 6.0, während Nebenversionen dazu dienen, Fehler zu beheben und neue Funktionen bereitzustellen. Die neueste stabile Version ist ThinkPHP 6.0.16. Berücksichtigen Sie bei der Auswahl einer Version die PHP-Version, die Funktionsanforderungen und den Community-Support. Für optimale Leistung und Support wird empfohlen, die neueste stabile Version zu verwenden.

FisheyeDetNet: der erste Zielerkennungsalgorithmus basierend auf einer Fischaugenkamera FisheyeDetNet: der erste Zielerkennungsalgorithmus basierend auf einer Fischaugenkamera Apr 26, 2024 am 11:37 AM

Die Zielerkennung ist ein relativ ausgereiftes Problem in autonomen Fahrsystemen, wobei die Fußgängererkennung einer der ersten Algorithmen ist, die eingesetzt werden. In den meisten Arbeiten wurde eine sehr umfassende Recherche durchgeführt. Die Entfernungswahrnehmung mithilfe von Fischaugenkameras für die Rundumsicht ist jedoch relativ wenig untersucht. Aufgrund der großen radialen Verzerrung ist es schwierig, die standardmäßige Bounding-Box-Darstellung in Fischaugenkameras zu implementieren. Um die obige Beschreibung zu vereinfachen, untersuchen wir erweiterte Begrenzungsrahmen-, Ellipsen- und allgemeine Polygondesigns in Polar-/Winkeldarstellungen und definieren eine mIOU-Metrik für die Instanzsegmentierung, um diese Darstellungen zu analysieren. Das vorgeschlagene Modell „fisheyeDetNet“ mit polygonaler Form übertrifft andere Modelle und erreicht gleichzeitig 49,5 % mAP auf dem Valeo-Fisheye-Kameradatensatz für autonomes Fahren

Tesla-Roboter arbeiten in Fabriken, Musk: Der Freiheitsgrad der Hände wird dieses Jahr 22 erreichen! Tesla-Roboter arbeiten in Fabriken, Musk: Der Freiheitsgrad der Hände wird dieses Jahr 22 erreichen! May 06, 2024 pm 04:13 PM

Das neueste Video von Teslas Roboter Optimus ist veröffentlicht und er kann bereits in der Fabrik arbeiten. Bei normaler Geschwindigkeit sortiert es Batterien (Teslas 4680-Batterien) so: Der Beamte hat auch veröffentlicht, wie es bei 20-facher Geschwindigkeit aussieht – auf einer kleinen „Workstation“, pflücken und pflücken und pflücken: Dieses Mal wird es freigegeben. Eines der Highlights Der Vorteil des Videos besteht darin, dass Optimus diese Arbeit in der Fabrik völlig autonom und ohne menschliches Eingreifen während des gesamten Prozesses erledigt. Und aus Sicht von Optimus kann es auch die krumme Batterie aufnehmen und platzieren, wobei der Schwerpunkt auf der automatischen Fehlerkorrektur liegt: In Bezug auf die Hand von Optimus gab der NVIDIA-Wissenschaftler Jim Fan eine hohe Bewertung ab: Die Hand von Optimus ist der fünffingrige Roboter der Welt am geschicktesten. Seine Hände sind nicht nur taktil

So führen Sie thinkphp aus So führen Sie thinkphp aus Apr 09, 2024 pm 05:39 PM

Schritte zum lokalen Ausführen von ThinkPHP Framework: Laden Sie ThinkPHP Framework herunter und entpacken Sie es in ein lokales Verzeichnis. Erstellen Sie einen virtuellen Host (optional), der auf das ThinkPHP-Stammverzeichnis verweist. Konfigurieren Sie Datenbankverbindungsparameter. Starten Sie den Webserver. Initialisieren Sie die ThinkPHP-Anwendung. Greifen Sie auf die URL der ThinkPHP-Anwendung zu und führen Sie sie aus.

Mit einer einzelnen Karte läuft Llama 70B schneller als mit zwei Karten, Microsoft hat gerade FP6 in A100 integriert | Mit einer einzelnen Karte läuft Llama 70B schneller als mit zwei Karten, Microsoft hat gerade FP6 in A100 integriert | Apr 29, 2024 pm 04:55 PM

FP8 und die geringere Gleitkomma-Quantifizierungsgenauigkeit sind nicht länger das „Patent“ von H100! Lao Huang wollte, dass jeder INT8/INT4 nutzt, und das Microsoft DeepSpeed-Team begann, FP6 auf A100 ohne offizielle Unterstützung von NVIDIA auszuführen. Testergebnisse zeigen, dass die FP6-Quantisierung der neuen Methode TC-FPx auf A100 nahe an INT4 liegt oder gelegentlich schneller als diese ist und eine höhere Genauigkeit aufweist als letztere. Darüber hinaus gibt es eine durchgängige Unterstützung großer Modelle, die als Open-Source-Lösung bereitgestellt und in Deep-Learning-Inferenz-Frameworks wie DeepSpeed ​​integriert wurde. Dieses Ergebnis wirkt sich auch unmittelbar auf die Beschleunigung großer Modelle aus – in diesem Rahmen ist der Durchsatz bei Verwendung einer einzelnen Karte zum Ausführen von Llama 2,65-mal höher als der von Doppelkarten. eins

See all articles