【问题标题】:Using doctrine with multiple MySQL Databases将教义与多个 MySQL 数据库一起使用
【发布时间】: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 )

谢谢!

【问题讨论】:

    标签: mysql database doctrine entitymanager


    【解决方案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...
    }
    

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

    我希望这会帮助一些人!

    【讨论】:

      猜你喜欢
      • 2016-11-12
      • 2015-12-19
      • 2021-04-11
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多