如何在Zend1.12和Doctrine2中配置多个DB

时间:2016-09-01 05:10:22

标签: php zend-framework doctrine-orm

要获得实体经理,我正在使用

$doctrine = Zend_Registry::get('doctrine');
$em = $doctrine->getEntityManager();

在application / Bootstrap.php中

public function _initAutoloaderNamespaces()
    {

    require_once APPLICATION_PATH . '/../library/Doctrine/Common/ClassLoader.php';
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $fmmAutoloader = new \Doctrine\Common\ClassLoader('Bisna');
    $autoloader->pushAutoloader(array($fmmAutoloader, 'loadClass'), 'Bisna');
    $classloader = new \Doctrine\Common\ClassLoader('Models', APPLICATION_PATH);
    $classloader->register();
    }

        /**
     * Set up sessions to be saved to the database.
     * Begin or resume a session.
     */
    protected function _initSaveSession()
    {

        if (strpos(APPLICATION_ENV, 'setup') !== false)
            return;
        $this->bootstrap('doctrine');
        // We can use the same connection settings for Zend_Db_Adapter too!
        // So less configuration, more flexibility.
        $doctrine = $this->getResource('doctrine');
        $entityManager = $doctrine->getEntityManager();

        //Register Blob Type
        Doctrine\DBAL\Types\Type::addType('blob', 'Doctrine\DBAL\Types\BlobType');      
        $entityManager->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('BLOB', 'blob');

        $entityManager->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('ENUM', 'string');

        $dbParameters = $entityManager->getConnection()->getParams();

        // Hack
        // Doctrine uses 'user' instead of 'username' for connection params
        $dbParameters['username'] = $dbParameters['user'];

        $db = Zend_Db::factory('PDO_MYSQL', $dbParameters);
        Zend_Db_Table::setDefaultAdapter($db);

        $config = array(
                'name' => 'sessions',
                'primary' => 'id',
                'modifiedColumn' => 'modified',
                'dataColumn' => 'data',
                'lifetimeColumn' => 'lifetime',
                'db' => $db
        );

        //Tell Zend_Session to use your Save Handler
        $savehandler = new Zend_Session_SaveHandler_DbTable($config);
        $savehandler->setLifetime(3600)->setOverrideLifetime(true);
        Zend_Session::setSaveHandler($savehandler);
        Zend_Session::start();
    }


    protected function _initDoctrine2()
    {

        $this->bootstrap('doctrine');

    }

在application / config / application.ini

;------------------------------------------------------------------------------

; Doctrine Cache Configuration

; ------------------------------------------------------------------------------

; Points to default cache instance to be used. Optional is only one cache is defined
resources.doctrine.cache.defaultCacheInstance = default

; Cache Instance configuration for "default" cache

;resources.doctrine.cache.instances.default.adapterClass = "Doctrine\Common\Cache\MemcacheCache"
resources.doctrine.cache.instances.default.adapterClass = "Doctrine\Common\Cache\ArrayCache"
resources.doctrine.cache.instances.default.namespace    = "Models"

resources.doctrine.cache.instances.default.options.servers.0.host           = localhost
resources.doctrine.cache.instances.default.options.servers.0.port           = 11211
resources.doctrine.cache.instances.default.options.servers.0.persistent     = true
resources.doctrine.cache.instances.default.options.servers.0.retryInterval  = 15



; ------------------------------------------------------------------------------

; Doctrine DBAL Configuration

; ------------------------------------------------------------------------------

; Points to default connection to be used. Optional if only one connection is defined
resources.doctrine.dbal.defaultConnection = default

; DBAL Connection configuration for "default" connection
resources.doctrine.dbal.connections.default.id                  = default
resources.doctrine.dbal.connections.default.eventManagerClass   = "Doctrine\Common\EventManager"
resources.doctrine.dbal.connections.default.configurationClass  = "Doctrine\DBAL\Configuration"
;resources.doctrine.dbal.connections.default.sqlLoggerClass     = "Doctrine\DBAL\Logging\EchoSQLLogger"

; Database configuration
;resources.doctrine.dbal.connections.default.parameters.wrapperClass = ""
resources.doctrine.dbal.connections.default.parameters.driver   = "pdo_mysql"
resources.doctrine.dbal.connections.default.parameters.dbname   = "database_test"
resources.doctrine.dbal.connections.default.parameters.host     = "localhost"
resources.doctrine.dbal.connections.default.parameters.port     = 3306
resources.doctrine.dbal.connections.default.parameters.user     = "root"
resources.doctrine.dbal.connections.default.parameters.password = "Tdatabase_password"

;resources.doctrine.dbal.connections.default.parameters.driverOptions.ATTR_USE_BUFFERED_QUERIES = true
doctrine.data_fixtures_path = APPLICATION_PATH "/configs/data/fixtures"


; ------------------------------------------------------------------------------

; Doctrine ORM Configuration

; ------------------------------------------------------------------------------


; Points to default EntityManager to be used. Optional if only one EntityManager is defined
resources.doctrine.orm.defaultEntityManager = default
; EntityManager configuration for "default" manager
resources.doctrine.orm.entityManagers.default.connection                               = default
resources.doctrine.orm.entityManagers.default.proxy.autoGenerateClasses                = true
resources.doctrine.orm.entityManagers.default.proxy.namespace                          = "Models\Proxy"
resources.doctrine.orm.entityManagers.default.proxy.dir                                = APPLICATION_PATH "/Models/Proxy"
resources.doctrine.orm.entityManagers.default.metadataDrivers.0.adapterClass           = "Doctrine\ORM\Mapping\Driver\AnnotationDriver"
resources.doctrine.orm.entityManagers.default.metadataDrivers.0.mappingNamespace       = "Models"
resources.doctrine.orm.entityManagers.default.metadataDrivers.0.mappingDirs[]          = APPLICATION_PATH "/Models"
resources.doctrine.orm.entityManagers.default.metadataDrivers.0.annotationReaderClass  = "Doctrine\Common\Annotations\AnnotationReader"
resources.doctrine.orm.entityManagers.default.metadataDrivers.0.annotationReaderCache  = default

如何添加除默认值以外的多个数据库连接以及如何在Entity中使用该连接并选择该特定实体管理器

0 个答案:

没有答案