Im vorherigen Artikel haben wir die Grundlagen von ThinkPHP kennengelernt, wie man einen Controller und eine Vorlage erstellt und wie man die M-Methode verwendet. In diesem Artikel wird die CURD-Operation von Daten erläutert und weitere Datenoperationen untersucht.
CURD
CURD ist eine Abkürzung in der Datenbanktechnologie. Die Grundfunktionen verschiedener Parameter in der allgemeinen Projektentwicklung sind CURD. Es stellt Erstellungs-, Aktualisierungs-, Lese- und Löschvorgänge dar. CURD definiert grundlegende atomare Operationen zur Verarbeitung von Daten. Der Grund dafür, dass CURD auf den technischen Schwierigkeitsgrad erhoben wird, liegt darin, dass die Leistung beim Abschluss einer aggregationsbezogenen Aktivität mit CURD-Vorgängen in mehreren Datenbanksystemen stark variieren kann, wenn sich die Datenbeziehungen ändern.
CURD verwendet in bestimmten Anwendungen nicht unbedingt die Methoden zum Erstellen, Aktualisieren, Lesen und Löschen, die von ihnen ausgeführten Funktionen sind jedoch dieselben. ThinkPHP verwendet beispielsweise die Methoden add, save, select und delete, um die CURD-Operationen des Modells darzustellen.
Daten erstellen
In den meisten Fällen übermittelt der CURD-Vorgang Daten normalerweise über ein Formular. Zuerst erstellen wir eine add.html-Vorlagendatei im Tpl/Form-Verzeichnis des Projekts ist:
Dann müssen wir auch eine FormAction.class im Aktionsverzeichnis des Projekts erstellen .php-Datei, Sie müssen vorerst nur die FormAction-Klasse definieren, ohne irgendwelche Operationsmethoden hinzuzufügen. Der Code lautet wie folgt:
Klasse FormAction erweitert Aktion{
}
Als nächstes besuchen Sie
http://localhost/app/index.php/Form/add
Sie können die Formularseite sehen. Wir haben die Add-Operationsmethode nicht definiert Controller, aber offensichtlich ist der Zugriff normal. Da ThinkPHP prüft, ob die entsprechende Vorlagendatei vorhanden ist, wenn die entsprechende Operationsmethode nicht gefunden wird, rendert der Controller die Vorlagendatei direkt und gibt sie aus. Für Betriebsmethoden ohne eigentliche Logik müssen wir also nur die entsprechende Vorlagendatei direkt definieren.
Wir können sehen, dass die im Formular definierte Übermittlungsadresse die Einfügeoperation für das Formularmodul ist. Um die Formularübermittlungsdaten zu verarbeiten, müssen wir die Einfügeoperationsmethode wie folgt in der FormAction-Klasse hinzufügen:
Klasse FormAction erweitert Action{
öffentliche Funktion insert(){
$Form = D('Form');
if($Form-> create()) {
$result = $Form->add();
if($result) {
$this->success('The Operation war erfolgreich! ');
der Wert des Primärschlüssels. Wenn es sich nicht um einen automatisch inkrementierenden Primärschlüssel handelt, gibt der Rückgabewert die Anzahl der eingefügten Daten an. Wenn false zurückgegeben wird, weist dies auf einen Schreibfehler hin.
Modell
Um das Testen zu erleichtern, erstellen wir zunächst eine think_form-Tabelle in der Datenbank:
TABELLE ERSTELLEN, WENN „think_form“ NICHT EXISTIERT (
`id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`content` varchar(255) NOT NULL,
`create_time` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
Im Gegensatz zur M-Funktion verwenden wir die D-Funktion Entsprechende Modellklasse, erstellen wir die folgende Modellklasse. Die Definitionsspezifikation der Modellklasse lautet: Modellname + Model.class.php (der Modellname wird in Kamel-Schreibweise definiert und der erste Buchstabe wird großgeschrieben)
Wir erstellen die Datei FormModel.class.php unter der Lib/Model Verzeichnis des Projekts und fügen Sie den Code wie folgt hinzu:
class FormModel erweitert Model {
// Automatische Validierung definieren
protected $_validate = array(
array('title','require ', 'Title must'),
);
// Automatische Vervollständigung definieren
protected $_auto = array(
array('create_time' ,'time',1,'function'),
);
}
wird hauptsächlich zur automatischen Überprüfung verwendet und Wir werden es für bestimmte Zwecke verwenden. Die anderen Kapitel werden separat besprochen und hier vorerst übersprungen. Was wir nur verstehen müssen, ist, dass, wenn Sie die D-Funktion zum Instanziieren einer Modellklasse verwenden, diese im Allgemeinen einer Datenmodellklasse entsprechen muss und die Erstellungsmethode die vom Formular übermittelten Daten automatisch überprüft und automatisch vervollständigt (falls definiert). ), wenn die automatische Überprüfung fehlschlägt, können Sie die Überprüfungsaufforderungsinformationen über die getError-Methode des Modells abrufen. Wenn die Überprüfung erfolgreich ist, bedeutet dies, dass das Datenobjekt erfolgreich erstellt wurde, es jedoch derzeit nur im Speicher gespeichert wird, bis wir das Add aufrufen Methode zum Schreiben der Daten in die Datenbank. Damit ist ein vollständiger Erstellungsvorgang abgeschlossen, sodass Sie sehen können, dass ThinkPHP beim Erstellen von Daten zwei Schritte verwendet:
Der erste Schritt besteht darin, das Datenobjekt mithilfe der Methode „create“ zu erstellen.
Der zweite Schritt besteht darin, die zu verwenden add method to Das aktuelle Datenobjekt wird in die Datenbank geschrieben.
Natürlich können Sie den ersten Schritt überspringen und direkt mit dem zweiten Schritt fortfahren, aber diese Art der Vorverarbeitung hat mehrere Vorteile:
1 Egal wie komplex das Formular ist, die Erstellungsmethode kann problemlos erstellt werden eine Codezeile Datenobjekt;
2. Vor dem Schreiben von Daten können die Daten überprüft und ergänzt werden.
Tatsächlich verfügt die Erstellungsmethode auch über viele funktionale Vorgänge mit nur einem Zweck, um die Sicherheit und Wirksamkeit sicherzustellen der in die Datenbank geschriebenen Daten.
Lassen Sie uns die Auswirkung der Formularübermittlung überprüfen. Wenn wir das Formular direkt absenden, ohne einen Titel einzugeben, gibt das System eine Meldung aus, dass der Titel so lauten muss.
Wenn wir das Formular erfolgreich absenden, werden wir sehen, dass das Feld „create_time“ in den in die Datentabelle geschriebenen Daten bereits einen Wert hat. Dieser wird durch die automatische Vervollständigung geschrieben das Modell.
Wenn Ihre Daten vollständig intern und nicht über ein Formular geschrieben werden (d. h. Sie können der Sicherheit der Daten voll und ganz vertrauen), können Sie die Add-Methode direkt verwenden. wie zum Beispiel:
$Form = D('Form');
$data['title'] = 'ThinkPHP';
$data['content'] = ' Formularinhalt';
$Form->add($data);
kann auch Objektmodusoperationen unterstützen:
$Form = D('Form' );
$Form->title = 'ThinkPHP';
$Form->content = 'Formularinhalt';
$Form->add( );
Beim Betrieb im Objektmodus muss die Add-Methode keine Daten übergeben und erkennt automatisch die aktuelle Datenobjektzuweisung.
Daten lesen
Wenn wir die Daten erfolgreich schreiben, können wir die Daten lesen. Im vorherigen Artikel wissen wir bereits, dass wir die Select-Methode verwenden können, um einen Datensatz abzurufen. Hier erhalten wir einzelne Daten über die Find-Methode. Die Leseoperationsmethode ist wie folgt definiert:
öffentliche Funktion read($id=0){
$Form = M('Form');
// Daten lesen
$data = $Form->find( $id);
if($data) {
$this->data = $data;// Vorlagenvariablenzuweisung
}else{
$this-> error('data error');
}
$this->display();
}
Die Leseoperationsmethode hat einen Parameter $id, was bedeutet, dass wir die ID-Variable akzeptieren können in der URL (Wir werden es später im Variablenkapitel ausführlich beschreiben. Der Grund, warum hier die M-Methode anstelle der D-Methode verwendet wird, liegt darin, dass die Find-Methode eine Methode in der Basismodellklasse Model ist und daher keine Notwendigkeit besteht um Overhead für die Instanziierung der FormModel-Klasse zu verschwenden (auch wenn sie als FormModel-Klasse definiert wurde). Hier wird der AR-Modus verwendet, sodass keine Abfragebedingungen übergeben werden. find($id) bedeutet, die Daten zu lesen, deren Primärschlüssel der $id-Wert ist. Die Rückgabe der Suchmethode ist ein Array im folgenden Format:
array(
'id' => 5 ,
'title' => 'Testtitel',
'content' => 'Testinhalt',
'status' => 🎜>
) Dann können wir die Daten in der Vorlage ausgeben, eine Lesevorlagendatei hinzufügen,id: | < ;td>{$data.id}||
Titel: td> | Inhalt: | {$data.content } |