将教义与多个 MySQL 数据库一起使用

Posted

技术标签:

【中文标题】将教义与多个 MySQL 数据库一起使用【英文标题】:Using doctrine with multiple MySQL Databases 【发布时间】:2021-11-27 13:08:43 【问题描述】:

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

customers.info customers.orders items.catalog items.stock 等等……

我尝试在网上搜索,但我意识到问题之一是“数据库”一词用于定义 2 个非常不同的东西:数据库“软件”,如 mysql、postgres、mariaDB 等。 . 和 SQL "CREATE DATABASE" 中的数据库。

所以当我查看 symfony 文档时,我发现了这个页面,它指出我不能使用 Doctrine ORM,因为我有多个 DB:https://symfony.com/doc/current/doctrine/multiple_entity_managers.html

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

我说的对吗?如果是的话,我怎么能做到这一点,知道我需要在连接 URL 中提供一个数据库名称(如 mysql://user:pass@127.0.0.1/oneOfMyDb )

谢谢!

【问题讨论】:

【参考方案1】:

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

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

为此,您需要声明用于每个实体的表和架构,例如:

<?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...

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

我希望这会帮助一些人!

【讨论】:

以上是关于将教义与多个 MySQL 数据库一起使用的主要内容,如果未能解决你的问题,请参考以下文章

使用教义保存日期字段

从教义开始。哪个版本好?

关联的教义 postLoad 事件

教义关系是否会影响应用程序性能?

教义/mysql的图形关系图? [关闭]

教义简单数组/数组转换为postgres int数组?