不对Business Objects进行策略的PHP ORM

时间:2012-02-20 08:53:39

标签: php orm

我继承了一个中型项目,我想添加一个ORM。我检查了所有正常的选项Doctrine,Propel redbean,但它们似乎都要求我用他们的特定实现来污染业务对象。我真正想要的(不确定是否可能)是通过其getter和setter等传递我的业务对象并让ORM持久保存值。我主要担心的是没有将应用程序绑定到ORM。

1 个答案:

答案 0 :(得分:2)

考虑Doctrine2。它没有实现ActiveRecord(我认为,你认为这是一种“污染”),而是DataMapper模式。您可以使用annotations配置Doctrine。

<?php
/** @Entity **/
class Post
{
    /** @Id @GeneratedValue @Column(type="integer") **/
    protected $id;
    /** @Column(type="string") **/
    protected $title;
    /** @Column(type="text") **/
    protected $body;
}

然后

<?php

use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;

require_once 'Doctrine/Common/ClassLoader.php';

$loader = new \Doctrine\Common\ClassLoader("Doctrine");
$loader->register();

$dbParams = array(
    'driver' => 'pdo_mysql',
    'user' => 'root',
    'password' => '',
    'dbname' => 'tests'
);
$path = 'path/to/entities';
$config = Setup::createAnnotationMetadataConfiguration($path, true);
$entityManager = EntityManager::create($dbParams, $config);
..................
$entityManager->persist($post);