6

有没有一种简单的方法可以在不使用任何框架的情况下为每个CRUD (create, retreive, update, delete)操作编写一个通用函数。PHP例如,我希望有一个创建函数,它将表名和字段名作为参数并将数据插入到mySQL database. 另一个要求是该函数应该能够支持连接,即如果需要,它应该能够将数据插入到多个表中。

我知道这些任务可以通过使用框架来完成,但由于各种原因 - 在这里解释太长 - 我无法使用它们。

4

8 回答 8

7

如果你尝试编写这样的函数,你很快就会发现你刚刚实现了另一个框架。

于 2008-09-25T07:49:57.247 回答
3

当然不是,这就是为什么存在这些框架并实现 crud 设施的原因。我首先会尝试说服任何需要实际使用现有框架的人,其次,如果上述情况失败,我会查看其中的一两个并复制实现想法。失败了你可以看看http://www.phpobjectgenerator.com/

于 2008-09-25T06:44:25.877 回答
2

没有任何框架包括没有任何 ORM?否则我建议看看DoctrinePropel

于 2008-09-25T06:31:30.883 回答
2

我知道你的感受。

Pork.DbObject 是一个简单的类,您可以从中扩展您的对象。它只需要一个数据库连接类即可工作。

请查看: www.schizofreend.nl/pork.dbobject/

(哦,是的,yuk @ php 对象生成器。膨胀警报!谁想在每个类中都有这些自定义函数???)

于 2008-09-25T09:47:10.867 回答
2

不久前,我在 SO 上遇到了这个问题,但当时我最终没有找到任何以轻量级方式做到这一点的东西。

我最终编写了自己的代码,最近我开始开源它(MIT 许可证),以防其他人发现它有用。它在 Github 上,如果它适合您的需要,请随时查看并使用它!

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

希望它能找到一些用处——也希望看到一些改进/贡献,所以请随时提交拉取请求!:-)

于 2012-11-27T19:57:13.223 回答
1

我写了这个东西,它是一种抛光的脚手架。它基本上是一个类,它的构造函数接受要使用的表、一个包含字段名称和类型的数组以及一个操作。基于此操作,对象调用自身的方法。例如:

这是我传递的数组:

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

然后我调用构造函数:

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

在上述情况下,构造函数调用“编辑”方法,该方法提供了一个显示 $table 数据的表单,但只有我在数组中设置的字段。它使用的记录由 $_GET 方法确定。在此示例中,“学生”字段显示为文本框(因此为“文本”类型)。“标题”只是使用的标签。由于“隐藏”,ID 字段不会显示以供编辑,但可供程序使用。

如果我通过了“删除”而不是“编辑”,它将从 GET 变量中删除记录。如果我只传递一个表名,它将默认为带有编辑、删除和新建按钮的记录列表。

它只是一个包含所有具有大量可定制性的 CRUD 的类。您可以根据需要使其复杂或简单。通过使其成为一个通用类,我可以将其放入任何项目中,并且只需传递指令、表信息和配置信息。对于一个表,我可能不想允许通过脚手架添加新记录,在这种情况下,我可能在参数数组中将“newbutton”设置为 false。

它不是传统意义上的框架。只是一个在内部处理所有事情的独立类。这有一些缺点。关键必须是我所有的表都必须有一个名为“id”的主键,没有这个你可以逃脱,但这会使事情复杂化。另一个是必须准备有关要管理的每个表的大型数组详细信息,但您只需要这样做一次。

有关此想法的教程,请参见此处

于 2008-09-25T13:54:00.603 回答
1

我认为你应该编写自己的函数来实现 CRUD,除非你时间紧迫。它可能是一个独立的框架,但您需要在尖叫框架之前了解框架的功能......了解这些事情也很方便,因为您可以轻松地找到框架上的错误并自己修复它们...... ……

于 2008-09-25T14:01:52.363 回答
0

这是可能的,但我不推荐它。

如果绝对没有办法使用框架,您可以创建一个所有其他模型对象扩展的基类。然后,您可以使基类基于get_class()and生成和执行 SQL get_class_vars()

是否可以?是的。
我会推荐它吗?不

于 2008-09-25T07:02:35.770 回答