跨数据库关系学说2和PHP

问题描述 投票:1回答:1

如何在学说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 Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;

$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);

生成实体,然后尝试填充结果。你会得到错误。

日志中的错误:在“User#address_id”中找不到目标实体地址。

php doctrine-orm doctrine
1个回答
1
投票

您需要与有权访问多个数据库(如db1和db2)的用户创建连接。

然后,您将在生成的实体文件中进行一些更改。您将在表名之前添加数据库名称,如:

use Doctrine\ORM\Mapping as ORM;
/**
 * User
 *
 * @ORM\Table(name="database_a.User", indexes={@ORM\Index(name="id", columns={"address_id"}), @ORM\Index(name="address_id", columns={"address_id"})})
 * @ORM\Entity
*/
class User
{

您可以从github下载运行示例代码

© www.soinside.com 2019 - 2024. All rights reserved.