2008-09-25 16 views
6

Gibt es eine einfache Möglichkeit, eine gemeinsame Funktion für jede der CRUD (create, retreive, update, delete)-Operationen in PHP ohne Verwendung eines Framework zu schreiben. Zum Beispiel möchte ich eine einzige create-Funktion haben, die den Tabellennamen und die Feldnamen als Parameter verwendet und Daten in eine mySQL database einfügt. Eine weitere Anforderung ist, dass die Funktion in der Lage sein sollte, Joins Ie zu unterstützen. Es sollte in der Lage sein, Daten in mehrere Tabellen einzufügen, falls erforderlich.Gemeinsame CRUD-Funktionen in PHP

Ich weiß, dass diese Aufgaben mithilfe eines Frameworks erledigt werden können, aber aus verschiedenen Gründen - zu langwierig, um sie hier zu erklären - kann ich sie nicht verwenden.

Antwort

1

ich dies schrieb Genau genommen ist es ein poliertes Gerüst. Es ist im Grunde eine Klasse, deren Konstruktor die zu verwendende Tabelle verwendet, ein Array, das Feldnamen und -typen enthält, und eine Aktion. Aufgrund dieser Aktion ruft das Objekt eine Methode für sich selbst auf. Zum Beispiel:

Dies ist das Array I passieren:

$data = array(array('name' => 'id', 'type' => 'hidden') 
      , array('name' => 'student', 'type' => 'text', 'title' => 'Student')); 

Dann rufe ich den Konstruktor:

new MyScaffold($table, 'edit', $data, $_GET['id']); 

Im obigen Fall der Konstruktor den 'Bearbeiten' Methode aufruft, die eine Form präsentiert Daten aus der Tabelle $ anzeigen, aber nur Felder, die ich in meinem Array eingerichtet habe. Der verwendete Datensatz wird von der $ _GET-Methode bestimmt. In diesem Beispiel wird das Feld 'Student' als Textbox dargestellt (daher der Typ 'Text'). Der Titel ist einfach das verwendete Etikett. Da es "versteckt" ist, wird das ID-Feld nicht zur Bearbeitung angezeigt, sondern steht dem Programm zur Verwendung zur Verfügung.

Wenn ich "löschen" anstelle von "bearbeiten" übergeben hätte, würde es den Datensatz aus der GET-Variable löschen. Wenn nur ein Tabellenname übergeben wird, wird standardmäßig eine Liste von Datensätzen mit Schaltflächen zum Bearbeiten, Löschen und Neu erstellt.

Es ist nur eine Klasse, die alle CRUD mit viel Anpassbarkeit enthält. Sie können es so kompliziert oder so einfach machen, wie Sie es wünschen. Indem ich es zu einer generischen Klasse mache, kann ich es in jedes Projekt einfügen und nur Anweisungen, Tabelleninformationen und Konfigurationsinformationen übergeben. Ich möchte vielleicht für eine Tabelle nicht zulassen, dass neue Datensätze über das Gerüst hinzugefügt werden, in diesem Fall könnte ich "newbutton" in meinem Parameter-Array auf false setzen.

Es ist kein Framework im herkömmlichen Sinne. Nur eine eigenständige Klasse, die alles intern abwickelt. Dies hat einige Nachteile. Die wichtigsten müssen sein, dass alle meine Tabellen einen Primärschlüssel haben müssen, der "id" genannt wird, man könnte ohne dies wegkommen, aber es würde die Angelegenheit komplizieren. Ein weiterer Grund ist, dass ein großes Array mit Informationen über jede zu verwaltende Tabelle vorbereitet sein muss, aber Sie müssen dies nur einmal tun.

Für ein Tutorial auf dieser Idee here

+0

Firefox mag Ihre Website nicht. –

+0

Diese Website scheint für eine Weile nicht erreichbar zu sein? Ich habe ein paar Mal versucht ... –

+0

Nicht meine Seite, nur damit verbunden. – lewis

2

Ohne irgendwelche Rahmen schließt ohne ORMs ein? Ansonsten würde ich vorschlagen, einen Blick auf Doctrine oder Propel zu werfen.

3

Natürlich nicht, deshalb existieren diese Frameworks und implementieren Crud-Funktionen. Ich würde zuerst versuchen, zu überzeugen, wer es braucht, um ein existierendes Framework zu benutzen, und zweitens, wenn ich das oben genannte nicht durchführe, würde ich mir ein oder zwei davon anschauen und die Implementierungsideen kopieren. Schade, dass Sie einen Blick auf http://www.phpobjectgenerator.com/

0

werfen können, ist es möglich, aber ich würde es nicht empfehlen.

Wenn es absolut KEINE Möglichkeit gibt, ein Framework zu verwenden, könnten Sie eine Basisklasse erstellen, die alle anderen Modellobjekte erweitern. Sie können dann veranlassen, dass die Basisklasse & SQL basierend auf get_class() und get_class_vars() generiert.

Ist es möglich? Ja.
Würde ich es empfehlen? nein

7

Wenn Sie versuchen, eine solche Funktion zu schreiben, werden Sie bald feststellen, dass Sie gerade ein weiteres Framework realisiert haben.

2

Ich kenne die Art, wie Sie sich fühlen.

Pork.DbObject ist eine einfache Klasse, aus der Sie Ihre Objekte erweitern können. Es benötigt nur eine DB-Verbindungsklasse, um zu funktionieren.

lesen Sie bitte: www.schizofreend.nl/pork.dbobject/

(. Achja, igitt @ php Objektgenerator aufblasen Alarm, die diese benutzerdefinierten Funktionen in jeder Klasse ??? haben will!)

+0

+1 für die Ordentlichkeit von Pork.DbObject! –

1

sehen Ich glaube, Sie Ihre eigenen Funktionen schreiben sollte, die CRUD erreichen, wenn Sie sich die Zeit gestresst sind. Es könnte ein Framework für sich sein, aber Sie müssen lernen, was das Framework vor dem Schreien des Frameworks tut ... es wird auch praktisch, diese Dinge zu wissen, weil Sie Bugs im Framework leicht erfassen und sie selbst beheben können .... ....

1

Ich kam diese Frage auf SO vor einer Weile zurück und ich fand nichts zu dieser Zeit, die dies in einer leichten Weise tat.

Ich habe meine eigene geschrieben und ich bin vor kurzem herumgekommen, um es (MIT-Lizenz) zu öffnen, falls andere es nützlich finden können. Es ist auf Github, fühlen Sie sich frei, es auszuprobieren und verwenden Sie es, wenn es Ihren Bedürfnissen entspricht!

https://github.com/ArthurD/php-crud-model-class

Hoffentlich wird es einige Verwendung finden - würde gerne einige Verbesserungen/Beiträge zu sehen, auch so fühlen sich frei Pull-Anfragen einreichen! :-)