Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Web Apps

Die Datenbank in Euerem PHP-App ohne Laravel beleuchten

by
Read Time:12 minsLanguages:

German (Deutsch) translation by Wei Zhang (you can also view the original English article)

Illuminate ist Laravels Datenbank-Engine minus Laravel. Es kommt zusammen mit dem Eloquent ORM in Laravel. Wenn Sie Ihre PHP-Apps mit ORMs erstellen und Laravel nicht verwenden möchten, ist dieses Tutorial genau das Richtige für Sie.

In diesem Tutorial werden wir das Backend für eine Q & A App mit PHP, Illuminate Database und dem Eloquent ORM erstellen.

Projektabhängigkeiten

  1. PHP: 5.5+
  2. MYSQL
  3. Composer

App-Funktionen

Unsere App wird zehn Aufgaben ausführen:

  • Fügen Sie einen Benutzer hinzu.
  • Fügen Sie eine Frage hinzu.
  • Fügen Sie eine Antwort zu einer Frage hinzu.
  • Upvote eine Antwort.
  • Bekommen Sie eine Frage mit Antworten.
  • Erhalten Sie alle Fragen und Benutzer, die sie gefragt haben.
  • Erhalten Sie spezielle Fragen, Antworten und Upvotes.
  • Zählen Sie Fragen von einem bestimmten Benutzer.
  • Aktualisieren Sie die Antwort durch den Benutzer.
  • Löschen Sie eine Frage.

Zuerst erstellen wir unser Projektverzeichnis und die Struktur.

Im Hauptprojektverzeichnis erstellen wir einen App-Ordner und erstellen dann in diesem App-Ordner zwei Ordner: Modelle und Controller. In diesem Bild ist unser Hauptprojektordner eloquent benannt. Sie sollten es mit dem Namen ersetzen, den Sie bevorzugen.

Our project organizationOur project organizationOur project organization

Als nächstes erstellen wir eine index.php-Datei im Hauptprojektordner auf derselben Ebene wie der App-Ordner.

Wir werden git verwenden, also erstellen wir eine .gitignore-Datei. Beachten Sie, dass dieser Schritt optional ist.

Als nächstes installieren wir die Abhängigkeiten, die benötigt werden, damit dieses Projekt funktioniert. Im Hauptprojektordner erstellen wir eine composer.json-Datei. Dann fügen Sie das in unserer composer.json Datei ein.

Um die Illuminate-Datenbank zu installieren, fügen wir diese zu unserer composer.json hinzu:
“illuminate/database”: “5.1.8”,.

Als nächstes fügen wir psr-4 Autoloading für unsere Modelle und Controller hinzu:

Nun sollte unsere composer.json-Datei wie folgt aussehen:

Wir werden nun diese beiden Composer-Befehle am selben Ort wie unsere composer.json-Datei ausführen:

Dies erzeugt einen Lieferantenordner, den wir zu Gitignore hinzufügen können (dies ist auch ein optionaler Schritt).

Fügen wir eine Konfigurationsdatei für unsere Datenbankanmeldeinformationen hinzu.

Im Hauptprojektverzeichnis erstellen wir eine Datei namens config.php und definieren DB-Details in der Datei Config.php. Beachten Sie, dass die Werte durch Ihre eigenen Verbindungsdetails ersetzt werden sollten.

Als Nächstes erstellen wir das Schema für unsere App.

Bevor wir das Schema für die Tabellen in unserer Datenbank erstellen, sollten Sie beachten, dass wir unserem Schema Zeitstempel hinzufügen können.

Das Eloquent ORM erwartet zwei Timestamp-Spalten, wenn wir die Zeitstempeloperation für eine bestimmte Tabelle / ein bestimmtes Modell aktivieren möchten. Sie sind die Spalten created_at und updated_at. Wenn wir Zeitstempel für ein Modell aktivieren, aktualisiert Eloquent diese Felder automatisch mit der Uhrzeit, zu der wir einen Datensatz erstellen oder aktualisieren.

Es gibt eine dritte Spalte namens deleted_at. Der Zeitstempel deleted_at funktioniert jedoch anders. Eloquent verfügt über eine Soft-Delete-Funktion, die anhand der deleted_at-Spalte ermittelt, ob ein Datensatz gelöscht wurde. Wenn Sie einen Datensatz mit der eloquenten Löschfunktion löschen und Soft Delete aktivieren, wird die Spalte mit dem Zeitpunkt des Löschens aktualisiert. Diese gelöschten Elemente können dann jederzeit abgerufen werden.

In dieser App werden wir die Zeitstempel nutzen, also werden wir alle drei in unserer Schemaerstellung verwenden.

Erstellen Sie Tabellen mit den folgenden Befehlen in MySQL:

Fragen

Antworten

Upvotes

Benutzer

Wir werden fortfahren, indem wir Dateien für Modelle und Controller für unsere Tabellen an folgenden Orten erstellen:

  • project_folder/app/models/question.php
  • project_folder/app/models/answer.php
  • project_folder/app/models/upvote.php
  • project_folder/app/models/user.php
  • project_folder/app/models/database.php
  • project_folder/app/controllers/questions.php
  • project_folder/app/controllers/answers.php
  • project_folder/app/controllers/upvotes.php
  • project_folder/app/controllers/users.php

Öffnen Sie models / database.php mit einem Editor.

Zuerst erstellen wir die Kapsel:

In der obigen Datei initialisieren und richten wir die Kapsel mit den in config.php definierten Konstanten ein und starten dann wortgewandt.

Der nächste Schritt besteht darin, ein Startskript zu erstellen. Dies ist eine Datei, in der alles ausgeführt wird, bevor unsere App funktioniert.

Wir erstellen eine Startdatei im Ordner "project_folder / start.php" und benötigen dann in der Datei die Autoload-Datei für den Composer:

require ‘vendor/autoload.php’;

Danach benötigen wir config.php, um die Anmeldeinformationen zu erhalten: require 'config.php';

Dann initialisieren wir die Datenbankklasse.

Deine start.php sollte so aussehen:

Fügen Sie start.php in Ihre index.php ein, da dies unsere Hauptdatei sein wird.

Unsere index.php Datei sieht nun so aus:

Als nächstes können wir anfangen, an unseren Controllern und Modellen zu arbeiten. In project_folder/ app / models / question.php fügen wir Folgendes hinzu:

Dann in project_folder/app/controllers/questions.php:

In project_folder / app / controllers / answers.php machen wir dasselbe:

Aufgabe 1: Fügen Sie einen Benutzer hinzu

Im Benutzermodell (project_folder / app / models / user.php) fügen wir den folgenden Code hinzu, um unseren Namespace zu definieren, das Eloquent Model zu erweitern und den Tabellennamen (protected$table) zu definieren und welche Felder in den Tabellen gefüllt werden können durch Massenerstellung (protected$fillable).

Im Benutzercontroller (project_folder / app / controllers / user.php) definieren wir wie gewohnt unseren Namensraum und die Klasse:

Um dann einen Benutzer zu erstellen, importieren wir im Benutzer-Controller den Benutzermodell-Namespace, use Models\User; und fügen anschließend eine Funktion zum Erstellen des Benutzers hinzu.

Unser Benutzer-Controller sieht jetzt so aus.

Dann fügen wir in index.php diese Zeilen hinzu und führen die App aus, um einen neuen Benutzer zu erstellen.

Aufgabe 2: Fügen Sie eine Frage hinzu

Um eine Frage hinzuzufügen, importieren wir den Fragenmodell-Namespace in den Fragen-Controller und schreiben eine create_question-Funktion:

Benutze Models\Question;

Dann:

Wir haben Eloquent-Massenerstellungsmodelle verwendet, um diesen Datensatz einzufügen, aber bevor er funktioniert, müssen wir zulassen, dass diese Felder ausfüllbar sind, da Eloquent-Modelle standardmäßig vor der Massenerstellung schützen.

Also gehen wir zum question modell und fügen der Klasse die protected$fillable-Eigenschaft hinzu.

protected $ fillable = ['question', 'user_id'];

Um dies auszuführen, importieren Sie den Fragen-Controller in index.php und rufen Sie statisch die Funktion create_question auf:

Verwende Controllers\Question;

Erstellen Sie dann eine Frage mit einer Frage und einer Benutzer-ID als Parameter:

$question = Fragen :: create_question ("Hast du jemals deinen Doppelgänger getroffen?", 1);

Dies gibt bei Erfolg ein Modellobjekt zurück.

Wir werden nun das Skript index.php mit verschiedenen Einträgen ausführen, um weitere Fragen zur Datenbank hinzuzufügen.

Aufgabe 3: Hinzufügen einer Antwort zu einer Frage

Im Antwortmodell wiederholen wir die Schritte für Frage- und Benutzermodelle, indem wir den folgenden Code hinzufügen:

Dann schreiben wir im Antwort-Controller diese Zeilen:

Dann können wir in index.php eine Antwort auf die Frage mit der ID 1, die wir zuvor hinzugefügt haben, mit der Benutzer-ID 2 erstellen. Vergessen Sie nicht, den Antworten-Controller zuerst in index.php zu importieren.

Um mehrere Einträge zu vermeiden, müssen Sie alle anderen Aufrufe in index.php kommentieren, bevor Sie eine neue starten.

Aufgabe 4: Upvote eine Antwort

Das sind ziemlich die gleichen Schritte, die wir gewohnt sind.

Wir werden das also in das Upvote-Modell unter project_folder / app / models / upvote.php kopieren.

Dann importieren wir in den Antworten-Controllern den Upvote Model-Namespace.

Verwenden Sie Models \ Upvote;

Dann erstellen wir eine upvote_answer-Funktion.

In index.php können wir die Funktion mit einer Dummy-Benutzer-ID aufrufen, um die Antwort mit der ID 1 zu aktualisieren.

$upvote = Antworten :: upvote_answer (1,14);

Aufgabe 5: Bekommen Sie eine Frage mit Antworten

Für solche Aufgaben können wir beredte Beziehungen verwenden.

Arten von Beziehungen gehören eins zu eins, eins zu viele, viele zu viele usw.

Bei Verwendung dieser Beziehungen geht Eloquent davon aus, dass in den Modellen ein Fremdschlüssel in der Form modelname_id vorhanden ist. Für diese Aufgabe ist die Beziehung eine Eins-zu-Viele-Beziehung, da eine einzelne Frage eine beliebige Anzahl von Antworten besitzen kann.

Zuerst definieren wir diese Beziehung, indem wir diese Funktion zu unserem Fragenmodell hinzufügen.

Dann schreiben wir im Fragen-Controller eine Funktion, um Fragen mit Antworten zu bekommen.

Dies ruft die Fragen mit ihren entsprechenden Antworten auf.

In index.php kommentieren wir alle anderen Aufrufe und führen aus:

$all = Questions::get_questions_with_answers();

Wir können die Variable $all var_dump oder print_r verwenden, um die Ergebnisse zu sehen.

Aufgabe 6: Bekommen Sie alle Fragen und Benutzer, die sie gestellt haben

Dies ist eine Eins-zu-eins-Beziehung, da eine Frage einen Benutzer hat, also fügen wir dies dem Fragenmodell hinzu.

Dann erstellen wir eine Funktion im Fragen-Controller und verwenden die with-Funktion im Fragenmodell.

In index.php alle anderen kommentieren und folgendes ausführen:

$all_with_users = Questions::get_questions_with_users();

Aufgabe 7: Bekommen Sie eine Frage mit Antworten und Upvotes

Zuerst definieren wir eine Beziehung zwischen Antworten und Upvotes. Eine Antwort hat viele Upvotes, also ist die Beziehung eins zu vielen.

Daher fügen wir unserem Antwortmodell die folgende Funktion hinzu:

Dann erstellen wir im Fragen-Controller die Funktion, um das zu bekommen:

Wie in den vorherigen Schritten kommentieren wir alle anderen Aufrufe von index.php und führen dies aus:

$ one_question = Fragen :: get_question_answers_upvotes (1);

Wir können die Variable $one_question ausdrucken, um die Ergebnisse zu sehen.

Aufgabe 8: Zählen Sie alle Fragen von einem bestimmten Benutzer

Zuerst importieren wir das Fragenmodell in die Benutzer-Controller:

Benutze Models\ Question;

Dann schreiben wir diese Funktion:

In index.php kommentieren wir andere Aufrufe und fügen diese Zeile hinzu:

$user_question_count = Users::question_count(1);

Dies gibt eine Ganzzahl zurück, bei der es sich um die Anzahl der Fragen handelt, die von einem Benutzer mit der ID 1 hinzugefügt wurden.

Wir können die Variable $user_question_count ausgeben und index.php ausführen, um die Ergebnisse zu sehen.

Aufgabe 9: Antwort von Benutzer aktualisieren

Das Konzept der Aktualisierung mit dem Eloquent ORM ist ziemlich einfach. Zuerst finden wir eine Aufzeichnung und dann mutieren und speichern wir.

Nun fügen wir in den Antwortreglern diese Funktion hinzu:

In index.php können wir alle anderen Anrufe kommentieren und die Antwort mit der ID 1 wie folgt aktualisieren:

$ update_answer = Antworten :: update_answer (1, "Dies ist eine aktualisierte Antwort");

Dies gibt einen booleschen Wert zurück - true - wenn die Aktualisierung erfolgreich ist.

Schritt 10: Löschen einer Frage (Soft Delete)

In dieser letzten Aufgabe implementieren wir Eloquent SoftDelete.

Zuerst teilen wir dem Fragenmodell mit, SoftDeletes zu verwenden, indem wir den SoftDeletes-Namespace importieren und dann das SoftDeletes-Merkmal in unserer Klasse verwenden.

Verwenden Sie Illuminate \ Database \ Eloquent \ SoftDeletes;

Nach der Klassendeklarationszeile fügen wir diese Zeile hinzu:

Verwenden Sie SoftDeletes;

Dann fügen wir der Eigenschaft protected $dates für das Modell deleted_at hinzu. Dies sind die erforderlichen Schritte.

protected $dates = [‘deleted_at’];

Unser Fragenmodell sieht nun so aus:

Dann erstellen wir die delete_question-Funktion im Fragen-Controller.

In index.php ausführen:

$delete = Questions::delete_question(1);

Herzliche Glückwünsche! Sie haben gerade ein voll funktionsfähiges Backend mit Illuminate und Eloquent aufgebaut. Und wir mussten nicht so viel Code schreiben, um das alles zu erreichen.

Der Code für dieses Tutorial kann auf GitHub gefunden werden.

Fazit

Im Lieferumfang von Illuminate ist auch der Abfrage-Generator enthalten, den Sie für komplexere Datenbankabfragen verwenden können. Dies ist definitiv etwas, mit dem Sie in Ihrer App experimentieren und es verwenden möchten.

Das einzige, was in der Standalone-Datenbank fehlt, sind Datenbankmigrationen, die ein wunderbares Merkmal von Laravel sind, und Lumen, der Mikrorahmen von Laravel. Sie sollten beide in Ihren Apps verwenden, um die Vorteile der nützlichen Funktionen zu nutzen.

Sie können mehr über Eloquent auf der Offiziellen Eloquent Documentation Seite erfahren.

Verweise

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.