代码之家  ›  专栏  ›  技术社区  ›  Zak

什么是最容易使用的PHP ORM框架?[关闭]

  •  17
  • Zak  · 技术社区  · 17 年前

    我正在寻找Ruby的PHP活动记录。这很简单,我只需定义我的字段,扩展基础ORM类,就可以免费获得ACID操作。我应该在不编写任何代码的情况下获得默认的getter和setter,但重写默认的getters或setter就像用我想要的行为声明get$fieldName或set$fieldName函数一样简单。Symphony让你为每个对象创建大约5个文件,据我所知,所有定义的对象都会加载。什么是更好的选择?为什么更好?你能在回答中举出简单的例子吗?

    除了交响乐,教义是我研究过的另一个ORM。您还需要创建描述数据结构的yaml文件。数据库已经定义了这些东西。什么只读取我的表defs,而不必在任何地方生成和存储配置文件?

    13 回复  |  直到 17 年前
        1
  •  11
  •   dcousineau    17 年前

    我非常喜欢 Doctrine 这是一个功能齐全的ORM,将取代Propel成为Symfony的默认ORM。

    它有你所期望的基本ORM内容,还有一个功能齐全的查询构建器,我发现它很棒。

    它附带了一整套命令行工具来管理您的数据库。例如,你可以在YAML中创建你的模式和夹具,让Doctrine根据你的模式生成类,创建数据库,根据模型创建模式,然后用你的夹具填充数据库——所有这些都是用一个单一的 ./doctrine build-all-reload .

    它还包括对数据库迁移和 recently updated 迁移以自动区分和生成迁移模型。

    根据您的教义投诉,您可以运行命令 ./doctrine generate-models-db ./doctrine generate-yaml-db 从当前的数据库设置中分别自动创建模型和yaml文件。

    其他细节包括“ Behaviors “这使得在模式中实现某些行为时变得更加容易。例如,您可以将“可时间戳”行为添加到类文件中。Doctine会自动添加一个'created_at'和'updated_at'列,填充它们,并且每个 $object->save() 您运行会自动更新“updated_at”列。更复杂的行为包括i18n、表版本控制和树(尽管实际上只有NestedSet)。

    就我个人而言,我非常喜欢教义,每次有机会都会对它赞不绝口。

        2
  •  9
  •   user175428 user175428    16 年前

    我使用了一个鲜为人知的orm层,叫做redbean。 你可以在这里找到它: http://www.redbeanphp.com . 它绝对是独一无二的,因为它只会自己创建表、列和索引,而根本不需要任何配置文件。我发现这大大节省了时间!

        3
  •  6
  •   jakber    17 年前

    两个代码点火器( http://codeigniter.com/user_guide/database/active_record.html )其仅支持PHP5的分支Kohana( http://docs.kohanaphp.com/libraries/orm )包含ActiveRecord模式的实现。

        4
  •  5
  •   Glorfindel Doug L.    7 年前

    我创造了自己的,没有臃肿。(虽然我需要更新我的现场消息来源)

    我创建它时完全考虑到了你提到的几点:没有几十个xml文件,没有庞大的框架,只有简单的构造函数和数据库到属性的映射,它可以完成你的基本CRUD/查找/连接操作。对于我做的大部分事情,我甚至不需要编写自定义查询。

    这一切我以前都写过 my site 此外,请务必查看 basic examples 为了理解它。

    我将发布的下一个版本包含一行join-on-choin(在数据库中走一条“路径”)、基于ini的数据库设置、跨数据库支持、超简单的数据库抽象和一个标准记录器,如果数据库宕机,该记录器将回退到SQLite。

    如果你对更新感兴趣,尽管喊一声,我会尽快处理的。

    哦,是的,别忘了,还有一个很好的视觉脚手架生成器,叫做 Pork.Generator 。它试图分析您的数据库结构,并找到1:1 1:many and many:many关系,并可以自动为您生成类:-) relations found in database
    (来源: schizofreend.nl )

        5
  •  4
  •   Bill Karwin    17 年前

    Zend_Db_Table Zend_Db_Table_Row 您不需要任何配置文件,大多数元数据都是从数据库本身“发现”的。

    从技术上讲,这些类不实现ActiveRecord模式。相反,他们实施 Table Data Gateway Row Data Gateway 模式。总之,这些提供了与ActiveRecord类似的价值,并且在某些方面比ActiveRecord更灵活。

    但是,与任何ORM一样,不可避免地会有一些SQL查询和操作无法通过OO接口完成。没有ORM可以作为一站式购物。

    脚注:我在Zend Framework项目上工作了一年多,特别是在Zend_Db组件上。但我不再为他们工作了。

        6
  •  1
  •   Ercan Ercan    17 年前

    检查可维护框架。虽然我更喜欢代码生成而不是ActiveRecord(运行时反射),但我发现可维护框架易于使用,特别是在ORM功能方面。

    http://framework.maintainable.com/mvc/3_model.php#c3.7

    如果你想要一个基于代码生成的框架,试试QCodo。无论dcousinau对Doctrine说了什么,我都可以对Qcodo说。这是一个模仿事件驱动的成熟框架。NET/Delphi。但是,您可以编写生成功能,并找到将生成的类与框架的其他部分分离的方法。因此,您可以将生成的分类嵌入到其他框架中。

        7
  •  1
  •   Vance Lucas    16 年前

    Ruby DataMapper实现后的另一个选项是 phpDataMapper 。这显然是一个数据映射器,而不是ActiveRecord:)。

        8
  •  1
  •   Frantisek Troster    16 年前

    我推荐Symfony的教义。尽管还有更多东西需要学习,但你会发现它具有项目发展后所需的功能(CRUD、表单框架、记录模板、DQL、插件支持、行为)。这两个项目都有非常活跃的社区,你不应该发现自己陷入了死胡同,因为你的大多数问题已经在官方教程或论坛上得到了回答。

    如果你不喜欢YAML中的数据库定义,你可以随时使用 ORM Designer 或MySQL工作台。

        9
  •  0
  •   Alex Weinstein    15 年前

    我建议 QCubed 这是一个非常强大的仅支持PHP5的ORM框架,专注于代码生成、UI脚手架和快速应用程序开发。请观看培训视频: http://qcu.be/content/video-screencasts

        10
  •  0
  •   BIOHAZARD    11 年前

    http://dbphp.net

    普罗斯

    • 动态生成/修改数据库/表/字段/各种表/字段属性。
    • 无需安装。
    • 根本没有配置。
    • 只需包含库并指定db-link参数即可开始工作。
    • 它内置了本地化支持。
    • 它具有各种缓存级别,并允许扩展缓存引擎。
    • 它可以同时处理许多不同的数据库连接。
    • 它可以在位于其他数据库服务器中的表之间建立关系。
    • 它使用类和变量文档注释提取表/字段属性。

    欺骗

    • 它只适用于对象。也就是说,您必须定义了类并拥有类的实例以节省负载等。
    • 它没有站点,但有示例文件夹。
        11
  •  0
  •   Arda    10 年前

    我喜欢 Idiorm and Paris 并在小型项目中使用它们。Idiorm是实际的ORM,而Paris是积极的记录实施。你可以用你喜欢的任何一个。

    还有一种叉子叫做 Granada ,它建立在Idiorm和Paris之上,并增加了诸如渴望加载等支持。

        12
  •  0
  •   Sunil Kumar Sain    9 年前

    PHP的对象关系映射器(ORM)位于强大的数据库抽象层(DBAL)之上。它的一个关键特性是可以选择用一种名为Doctrine Query Language(DQL)的专有面向对象SQL方言编写数据库查询,该方言的灵感来自Hibernates HQL。这为开发人员提供了一种强大的SQL替代方案,可以保持灵活性,而不需要不必要的代码重复。

        13
  •  0
  •   DevTheJo    7 年前

    如果你想要一个“即时”的数据库建模,其中表会自动适应你从代码中推送的数据,看看 FoxORM 用于DataMapper方法或 RedBean 用于ActiveRecord方法