如何在原则 2 中实现此代码:
Doctrine_Manager::connection('mysql://root@localhost/doctrine_test1', 'doctrine_test1');
Doctrine_Manager::connection('mysql://root@localhost/doctrine_test2', 'doctrine_test2');
任何替代。我正在使用此代码进行连接:
<?php
// bootstrap.php
require_once "vendor/autoload.php";
use DoctrineORMToolsSetup;
use DoctrineORMEntityManager;
$paths = array("/path/to/entity-files");
$isDevMode = false;
// the connection configuration
$dbParams = array(
'driver' => 'pdo_mysql',
'user' => 'root',
'password' => '',
'dbname' => 'foo',
);
$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
$entityManager = EntityManager::create($dbParams, $config);
示例方案:
--databse_a
CREATE TABLE User (
id INT AUTO_INCREMENT NOT NULL,
address_id INT DEFAULT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
--databse_b
CREATE TABLE Address (
id INT AUTO_INCREMENT NOT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
ALTER TABLE database_a.User ADD FOREIGN KEY (address_id) REFERENCES database_b.Address(id);
生成实体,然后尝试获取结果。你会得到错误。
日志中的错误:在"用户#address_id"中找不到目标实体地址。
您需要与有权访问多个数据库(如 db1 和 db2(的用户建立连接。
然后,您只需在生成的实体文件中进行一些更改。您将在表名之前添加数据库名称,例如:
use DoctrineORMMapping as ORM;
/**
* User
*
* @ORMTable(name="database_a.User", indexes={@ORMIndex(name="id", columns={"address_id"}), @ORMIndex(name="address_id", columns={"address_id"})})
* @ORMEntity
*/
class User
{
您可以从 github 下载运行示例代码