Andy's Blog » » 最佳PHP开源ORM框架Doctrine

最佳PHP开源ORM框架Doctrine

最佳PHP开源ORM框架Doctrine

doctrine

官方网站 : http://www.doctrine-project.org/

Doctrine是一个PHP的ORM框 架,它在 >=php5.2.3版本上才支持,它是一个功能强大的数据抽象层.它的一个主要特征就是写代码是OO方式的,并且它有一个DQL的语言, 这为开发人员提供了强大的替代到SQL保持最高的灵活性,而不需要不必要的代码重复。

Doctrine和Codeigniter结合使用方法 : http://codeigniter.com/wiki/Using_Doctrine_with_Code_Igniter/

===================================
Doctrine数据库编码修正:

有个问题就是建立数据库时一般推荐采用UTF-8编码以方便支持中文,同时为了统一连接校对和数据库字符为UTF-8, 在直接写sql的时代针对MySQL我们可以直接写 “set names utf8″,其他数据库就不同了。Doctrine 考虑得比较周到,可以通过如下操作来对所有的数据库连接进行设置:

Doctrine_Manager::getInstance()->getCurrentConnection()->setCharset('utf8')

在mysql数据库里面,每次操作都会执行,而我们很多时候可能根本不需要数据库操作,太浪费了。以下是解决办法,可以在建立实际的数据库链接操作之后才执行这条语句。

<?php
class CharsetListener extends Doctrine_EventListener
{
    
protected static $charset = 'utf8';
    
public function setCharset($charset='utf8')
    
{
        
self::$charset = $charset;
    
}
 
    
function get($charset='')
    
{
        
if(!empty($charset))
        
{
            
self::setCharset($charset);
        
}
        
return new self();
    
}
 
    
public function postConnect(Doctrine_Event $event)
    
{
        
$event->getInvoker()->setCharset(self::$charset);
    
}
}

下面是初始化代码

$config= parse_ini_file(ROOT . DS . 'app/config.ini.php', true);
$db = $config['database'];
$dsn = “{$db['driver']}://{$db['user']}:{$db['pass']}@{$db['host']}/{$db['name']}”;
Doctrine_Manager::connection($dsn, $db['name']);
CharsetListener::setCharset($db['charset']);
Doctrine_Manager::getInstance()->getCurrentConnection()->addListener(CharsetListener::get($db['charset']));

这样就能够兼顾效率和字符集了。

Incoming search terms:

Tags: PHP, ORM, 开源, 框架

本文地址: http://www.21andy.com/new/20090522/1300.html