带有来自模型的数据库的 PHP Orm

Posted

技术标签:

【中文标题】带有来自模型的数据库的 PHP Orm【英文标题】:Php Orm with database from model 【发布时间】:2010-12-26 03:35:08 【问题描述】:

我已经习惯了 Django。使用 Django,您可以为 ORM 定义模型,它负责生成/更改数据库本身以根据模型存储数据。

php 中,我正在寻找类似的解决方案。 Doctrine 似乎是标准的 php ORM,但是,据我所见,您必须编写数据库并 then 附加到它,或者编写数据库创建脚本 then em> 生成模型并开始工作。

是否有一步模型定义来使用 Doctrine 或其他 php orm 解决方案创建数据库?谢谢。

【问题讨论】:

【参考方案1】:

你是不是只有 Django 本身的 ORM 负责创建数据库和所有这些东西?

但是 Doctrine 可以做到setup automatically。我复制了最重要的部分:

// generate.php

require_once('bootstrap.php');

Doctrine_Core::dropDatabases();
Doctrine_Core::createDatabases();
Doctrine_Core::generateModelsFromYaml('schema.yml', 'models');
Doctrine_Core::createTablesFromModels('models');

schema.yml 包含YAML 格式的表定义。

由于您已经在谈论框架,您可能会看一下Symfony,它几乎可以完成您想要的事情,并且为它提供了更简单的界面(比 Doctrine 本身)。您可以使用 Propel 或 Doctrine 作为 ORM。

【讨论】:

【参考方案2】:

不是 100% 相同,但我在 PHP 中需要 ORM 时使用 Propel (http://propel.phpdb.org/trac/)。它已经存在了一段时间,并且非常成熟。它也是 Symfony 框架的一部分。处理不如 Django 好,但仍然很方便。

【讨论】:

它是否允许创建模型并相应地创建/更改数据库的一步解决方案? 它为您创建数据库和表。因此,您不必为数据库的东西而烦恼。 Propel Standalone 本身并不是一个多合一的解决方案。为此,您可能需要查看symfony-project.org - 一个利用和自动化 Propel 的 PHP 框架。在那里,您可以通过命令行生成您的应用程序和模型,并让它也构建您的数据库。但是,大多数时候我可以单独使用 Propel 并将我的代码粘贴到它上面,因为这是经过深思熟虑的,我不介意多做一两个小步骤。【参考方案3】:

phpDataMapper 专门为此而设计。它没有附带的分布式 shell 或 cli 脚本,但您可以从代码库中执行此操作:

设置适配器:

try 
    $adapter = new phpDataMapper_Adapter_mysql('localhost', 'db', 'root', '');
 catch(Exception $e) 
    echo $e->getMessage();
    exit();

定义您的映射器/表格字段:

class PostMapper extends phpDataMapper_Base

    // Specify the data source (table for SQL adapters)
    protected $_datasource = "blog_posts";

    // Define your fields as public class properties
    public $id = array('type' => 'int', 'primary' => true, 'serial' => true);
    public $title = array('type' => 'string', 'required' => true);
    public $body = array('type' => 'text', 'required' => true);
    public $status = array('type' => 'string', 'default' => 'draft');
    public $date_created = array('type' => 'datetime');

使用适配器和设置表实例化映射器:

$postMapper = new PostMapper($adapter [, $adapterSlave]);
$postMapper->migrate();

http://phpdatamapper.com/documentation/getting-started/

【讨论】:

【参考方案4】:

您也可以只用一种方法尝试 db.php orm:

$database->update()

它创建数据库/表/字段或将它们更新为最近的更改,如下所述:

http://dbphp.net/update-table-structures-or-updatecreate-new-fields/

关于 db.php 的有趣事实是它只是一个具有非常直观的 api 的单个文件,并且不依赖其他库,同时提供完整的 orm 功能,我什至在我的重负载电子商务项目中使用它。

【讨论】:

以上是关于带有来自模型的数据库的 PHP Orm的主要内容,如果未能解决你的问题,请参考以下文章

PHP 独立使用 laravel ORM 数据库组件,PHP ORM数据库模型组件

PHP 独立使用 laravel ORM 数据库组件,PHP ORM数据库模型组件

来自通用模型定义的两种语言的 ORM 实体类生成器

什么是ORM,以及在php上的使用

是否有一个带有/ORM(Laravel、Cake、Codeigniter)的 PHP 框架,我们可以在其中覆盖数据交互以从 rest api 中获取数据?

Django模型和ORM