将学说与多个 MySQL 数据库一起使用

Using doctrine with multiple MySQL Databases

我正在从现有的 MySQL 数据库开始一个新项目,我想为此使用 symfony+doctrine。 问题是我当前的数据库中有多个数据库。例如,它有 db.tables 像:

我尝试在线搜索,但我意识到问题之一是“数据库”一词用于定义 2 个截然不同的事物:数据库“软件”,如 mysql、postgres , mariaDB, 等等...和 ​​SQL "CREATE DATABASE".

中的数据库

所以当我查看 symfony 文档时,我找到了这个页面,其中指出我不能使用 Doctrine ORM,因为我有多个数据库:https://symfony.com/doc/current/doctrine/multiple_entity_managers.html

但是我读得越多,我就越有这样的感觉:“你需要一个用于 Mysql 的 entityManager,一个用于 Postgres 等......并且实体不能跨定义关联不同的实体管理器”,而不是“实体不能定义来自同一数据库软件的不同数据库之间的关联”

我说的对吗?如果是的话,知道我需要在连接 URL 中提供数据库名称(例如 mysql://user:pass@127.0.0.1/oneOfMyDb )

谢谢!

好的,所以我终于找到了答案,这可能对处于相同情况的其他人有用。

可以在 mySQL 中使用多个 database/schema 的学说。是的,这里的问题是 MySQL 有点混合了数据库和模式的概念,因此造成了混淆。

为此,您需要声明用于每个实体的 table 和模式,例如:

<?php

namespace App\Entity;

use App\Repository\PropertyRepository;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass=PropertyRepository::class)
 * @ORM\Table(name="property", schema="myOtherDB")
 */
class Property
{
 // some stuff here...
}

这样,无论您在连接中声明哪个数据库名称,它都会连接到您的其他数据库(模式),您将能够从外键获取数据,即使该数据存储在 table 在不同的数据库(架构)中。

希望这对一些人有所帮助!