将教义与多个 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 数据库一起使用的主要内容,如果未能解决你的问题,请参考以下文章