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

ThinkPHP: Das zweite von drei leistungsstarken Tools für Modelle (Modifikator)

Dec 16, 2019 pm 05:01 PM
thinkphp 修改器 模型

ThinkPHP: Das zweite von drei leistungsstarken Tools für Modelle (Modifikator)

Modifikator ist eines der drei mächtigsten „Werkzeuge“ des Modells. In diesem Artikel fassen wir die Verwendung des Modifikators und einige Vorsichtsmaßnahmen zusammen.

Modifikator definieren

Die Funktion des Modifikators besteht darin, einige notwendige Datenverarbeitungen durchzuführen, bevor die Modellobjektdaten in die Datenbank geschrieben werden. Die Standarddefinition des Modifikators lautet wie folgt:

public function setFieldNameAttr($value, $data)
{
    // 对value值进行处理 data参数是当前全部数据
    // 返回值就是实际要写入数据库的值
    return $value;
}
Nach dem Login kopieren

FieldName entspricht dem Feld field_name der Datentabelle (achten Sie auf die Spezifikationen der Datentabellenfelder und die Definitionsspezifikationen der Modifikatormethode, da es sonst zu Fehlern kommt).

Grundsätzlich sollte jeder Modifikator nur die Daten des entsprechenden Feldes verarbeiten, es ist jedoch zulässig, bei Bedarf mehrere Felder gleichzeitig zu verarbeiten.

Das Folgende ist ein Beispiel

public function setBirthdayAttr($value, $data)
{
    // 格式化生日数据
    $birthday = strtotime($value);
    // 根据生日判断年龄
    $age = getAgeByBirthday($birthday);
    // 赋值年龄数据
    $this->setAttr('age', $age);
    return $birthday;
}
public function setAgeAttr($value,$data)
{
    return floor($value);
}
Nach dem Login kopieren

Der Grund, warum die setAttr-Methode verwendet wird, besteht darin, sicherzustellen, dass die Alterszuweisungsoperation weiterhin einen separaten Modifikator durchlaufen kann. Wenn Sie keine zusätzlichen Modifikatoren haben, können Sie es auch als

public function setBirthdayAttr($value, $data)
{
    // 格式化生日数据
    $birthday = strtotime($value);
    // 根据生日判断年龄
    $age = getAgeByBirthday($birthday);
    // 赋值年龄数据
    $this->data['age'] = $age;
    return $birthday;
}
Nach dem Login kopieren

schreiben. Beachten Sie, dass es nicht als

$this->age = $age;
Nach dem Login kopieren

geschrieben werden darf, da das Zuweisen von Datenobjekten innerhalb des Modells zu Ungenauigkeiten führt Verwechslung mit den internen Attributen des Modells vorhersehbare Konsequenzen.

Wenn Sie möglicherweise andere Felder in einem bestimmten Modifikator ändern, denken Sie daran, dass der Feldmodifikator, den Sie zusätzlich ändern müssen, zugewiesen wurde (oder der Modifikator ausgelöst wurde).

So rufen Sie auf

Die Modifikatormethode muss nicht manuell aufgerufen werden. Nachdem sie gemäß der Definitionsspezifikation definiert wurde, ruft das System sie automatisch unter auf Folgende Umstände:

·Modellobjektzuweisung;

·Aufrufen der Datenmethode von das Modell und der zweite Parameter werden in true übergeben

·Rufen Sie die Speichermethode des Modells auf und übergeben Sie die Array-Daten; >

·Die setAttr-Methode des Modells explizit aufrufen

· definiert die automatische Vervollständigung dieses Feldes; Zum Beispiel definiert das Benutzermodell die Gerätemethode „setPasswordAttr“ zur Änderung.

public function setPasswordAttr($value, $data)
{
    return md5($value);
}
Nach dem Login kopieren

Bei Verwendung wie folgt wird der Wert des in der Datenbank gespeicherten Passwortfelds zum Wert nach md5 („think“).

$user = User::get(1);
$user->password = 'think';
$user->save();
Nach dem Login kopieren

Wenn Sie keine Modifikatoren verwenden, die Daten aber in einigen Fällen manuell steuern möchten, können Sie die folgende Methode ausprobieren.

$user = User::get(1);
$user->data('password', md5('think'));
$user->save();
Nach dem Login kopieren

Es wird derzeit nicht vom Modifikator verarbeitet.

Konflikte vermeiden

Viele Entwickler definieren gerne die automatische Vervollständigung (einschließlich Einfügen und Aktualisieren) für Modifikatoren.

protected $auto = ['password'];
Nach dem Login kopieren

Dies ist ein scheinbar cleverer, aber sehr fataler Fehler vor V5.1.27. Versuchen Sie, ihn zu vermeiden, da er gemäß den zuvor angegebenen Modifikator-Auslösebedingungen dazu führt, dass der Modifikator zweimal ausgeführt wird. Dies stellt einen katastrophalen Fehler dar und führt dazu, dass sich alle Benutzer nach der Registrierung nicht mehr normal anmelden können.

Die Lösung besteht darin, die automatische Vervollständigung des Passwortfelds abzubrechen, da der Modifikator bei jeder Zuweisung eines Werts automatisch ausgelöst wird. Wenn keine Zuweisung erfolgt, bedeutet dies, dass das Passwort nicht geändert wurde. und es gibt keine automatische Vervollständigung.

Autovervollständigungsfelder sind normalerweise Felder, die nicht im Formular enthalten sind und im Allgemeinen Felder sind, die automatisch vom System verarbeitet werden.

Version V5.1.27 hat dieses Problem behoben. Alle Modifikatoren dürfen nur einmal ausgeführt werden, und das oben genannte Problem besteht nicht mehr. Aber es scheint ein neues Problem mit sich gebracht zu haben. Möglicherweise möchten Sie die Daten im Falle des Modells ändern.

User::beforeUpdate(function($user) {
    $user->password = md5('think');
});
Nach dem Login kopieren

stellt fest, dass der Wert der Daten im Modell beforeUpdate nicht geändert werden kann. Der Grund dafür ist, dass der Modifikator des Modells während der ersten Zuweisung ausgeführt wurde und während der zweiten Zuweisung ungültig ist (wird nicht erneut ausgeführt).

Die Lösung besteht darin, die Datenmethode wie zuvor erwähnt zu verwenden, ohne den Modifikator für die Datenzuweisung aufzurufen.

User::beforeUpdate(function($user) {
    $user->data('password', md5('think'));
});
Nach dem Login kopieren

Natürlich ist es besser, den Datenverarbeitungsmechanismus von Modifikatoren, Autovervollständigungen und Modellereignissen zu planen. Verwenden Sie nicht mehrere Mechanismen, um Daten gleichzeitig für ein Feld zu ändern und die Daten in das Feld zu schreiben Die Datenbank sollte und darf nur über diese Methode geändert werden.

Automatische Typkonvertierung

Wenn Ihr Modifikator nur eine Typkonvertierung für Daten durchführt, müssen Sie keinen Modifikator definieren, sondern nur den Feldtyp direkt definieren.

public function setScoreAttr($value, $data)
{
    return (float) $score;
}
Nach dem Login kopieren

Die obige Modifikatormethode kann direkt geändert werden in

protected $type = [
    'score'    =>    'float',
];
Nach dem Login kopieren

Wenn Sie gleichzeitig einen Modifikator und einen Typ für ein Feld definieren, hat der Modifikator Vorrang.

Typdefinitionen können nicht nur einfache Datentypen definieren, sondern auch einige zusätzliche Verwendungszwecke haben. Beispielsweise werden JSON-Typ, Array-Typ und Objekttyp JSON-serialisiert, und der Serialisierungstyp serialisiert die Daten.

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/817548

Das obige ist der detaillierte Inhalt vonThinkPHP: Das zweite von drei leistungsstarken Tools für Modelle (Modifikator). 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 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate 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

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

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

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