通過CRUD操作你的意思只是(乏味的)數據庫查詢?
您可以輕鬆地設置數據庫,以便除內容類型中的一些常見字段外,特定內容類型的所有數據都作爲序列化關聯數組存儲在TEXT字段中。
這樣,您只需要一組查詢就可以CRUD任何特定的內容類型,因爲傳遞給CRUD函數的數據只是盲目序列化的。
例如,假設我們聲明內容標題,創建/更新日期,標籤和簡短描述被視爲常見數據。從那裏我們有一個博客和一個頁面內容類型。
我可能會創建一個數據庫表這樣:
CREATE TABLE `content` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR NOT NULL,
`short_description` TEXT NOT NULL,
`tags` TEXT ,
`data` TEXT ,
`content_type` INT NOT NULL,
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL,
PRIMARY KEY (`id`)
)
(來吧,假設我們將創建CONTENT_TYPE參考表)
雖然該博客可能需要像數據「pingbacks」和頁面可能只需要存儲身體,您只需將類似以下示例的輸出存儲在博客中:
$data = serialize(array(
"body" => "Lorem ipsum",
"pingbacks" => array()
));
更新很簡單,只要您從數據庫中獲取數據,就可以將要編輯的數據反序列化爲基於內容類型選定的表單。顯示工作方式相同,只需根據內容類型獲取模板並將其發送到非序列化數據數組。模板永遠不用擔心數據如何存儲,只需要獲取$ data ['pingbacks']。
至於你的表格,我的建議是打破你的反OOP盟約,找到一個表格生成庫。如果你可以從框架中提取它,使用Zend_Form與Zend_Config和Zend_Validate從Zend Framework(在這種情況下所有Zend_Config相當於加載和遍歷XML和INI文件的便利接口)使生活真的很好。您可以讓XML文件爲每種內容類型定義表單,並且只需在頁面上呈現表單(根據內容類型獲取XML),獲取過濾的數據,刪除「常見字段」名稱,創建/更新日期,然後序列化剩下的內容到數據庫中。不需要特定內容類型的模式知識(除非你希望是嚴格的)。
儘管作爲個人,我會強烈建議您考慮抓取Zend_Form(使用Zend_Validate和Zend_Config)以及使用Doctrine作爲ORM /數據庫抽象層。您可能會發現至少Doctrine會讓您的生活在數據庫上運行時變得更加輕鬆。
PHP ADOdb不是那種夢幻般的伴侶。 – kta 2013-10-11 13:38:31