通过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