Zend_Db - Aufbau einer Abfrage Löschen
Ich bin versuchen, neu zu erstellen Sie den folgenden in das Zend Framework und bin mir nicht sicher, wie es zu tun:
DELETE FROM mytablename WHERE date( `time_cre` ) < curdate( ) - INTERVAL 4 DAY
Ich dachte so etwas wie:
$table = $this->getTable();
$db = Zend_Registry::get('dbAdapter');
$db->delete($table, array(
'date(`time_cre`) < curdate() - interval 4'
));
Tut, richtig?
Was ist der beste Weg, um mit etwas wie diesem?
EDIT: Ack! Sorry, ich war die Anpassung dieses aus ein WÄHLEN Sie ich mit zu testen und nicht ändern Sie die syntax richtig, wenn ich klebte es in. Ich habe bearbeitet das Beispiel, um es zu beheben.
- es ist nicht klar, was Sie brauchen, zu löschen. Die syntax der delete ist
DELETE FROM [table_name]
- was dbms benutzt du (ich würde davon ausgehen, mysql?) Ihre syntax ist nicht-standard und sehr sonderbar. Wenn Sie nur wollen, um das entfernen von Daten aus einer Spalte, die Sie verwenden sollten, AKTUALISIEREN und setzen Sie die Spalte, NULL,",0 usw. LÖSCHEN ist speziell für das entfernen von gesamten Zeilen, es sei denn, Ihr dbms dies unterstützt etwas, das ich bin nicht vertraut mit.
- Von wo hast du das syntax:
DELETE [something] FROM table [where]
? Weder MySQL, PostgreSQL oder Oracle verwendet. NachDELETE
Sie brauchen nichts, weil Sie beim löschen der ganzen Zeile, keine Spalte Wert. - DELETE löscht die komplette Zeile , n
- Ich konnte nicht Bearbeiten des Beispiel richtig. Ich habe aktualisiert mein Beispiel.. tut mir Leid, dass.
- Dieser code wird im controller, custom class geerbt von
Zend_Db_Table_Abstract
Klasse, oder benutzerdefinierte Klasse geerbt vonZend_Db_Table_Row(_Abstract)
? - in controller und erbt von
Zend_Db_Table_Abstract
. Und bieten mehr Erklärung, was ich versuche zu tun, meine grundlegende Ziel ist zum löschen Alter Einträge aus einer sehr großen Datenbank alle 4 Tage. Ich kenne die sql-Anweisung funktioniert (die bearbeitete version, die ich gerade aktualisiert), aber ich bin nicht sicher, wie es in ZF.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Herausgefunden...
$table
bekommt eine Referenz auf die Tabelle, die ich Bearbeiten möchte...$db
packt eine Instanz der Datenbank-adapter, so kann ich verwendenquoteInto()
...$where
baut der main-Teil der Abfrage zu akzeptieren$days
zu machen, die Dinge ein wenig flexibler.Eine Aktion erstellen, um diese Methode aufzurufen... so etwas wie:
Und jetzt treffen:
http://myhost/thiscontroller/pruneold/
werden die Einträge gelöscht. Natürlich, jeder Sie auf diesen url werden die Einträge gelöscht, aber ich habe Schritte unternommen, nicht im Lieferumfang enthalten in meinem Beispiel für den Umgang mit diesem. Hoffe, das jemand hilft.$data
erbt vonZend_Db_Table_Abstract
. Also innerhalb IhrespruneOld
- Methode haben Sie Zugriff auf db-adapter mit$this->getAdapter()
- Sie nicht haben, um es aus der Registrierung. Zweite Sache - Insider-Modell, Sie haben auch Methodedelete()
, die nimmt einen parameter -where
array.Ich in der Regel tun dies, um eine Zeile zu löschen
versuchen:
$db->delete($table, array(
'Datum(time_cre) < ?' => new Zend_Db_Expr('curdate() - interval 4')
));