多个数据库,一个条令连接,和一个不听话的捆绑包


Multiple Databases, One Doctrine Connection, and the one disobedient bundle

我对ORM 条令有一个奇怪的问题

我有各种捆绑包,它们都包含自己的一组实体,这些实体都管理自己的数据库。它们都在同一默认连接下进行管理。

# Doctrine Configuration
doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                driver:   pdo_mysql
                host:     "%database_host%"
                port:     "%database_port%"
                user:     "%database_user%"
                password: "%database_password%"
                dbname:   "%database_dbname%"
                charset:  UTF8
    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true

由于所有托管数据库共享相同的连接,因此有意将dbname参数留空,并由我在@Table注释中指定适当的数据库和表。

我的问题是,三个捆绑包中只有两个能正常工作。

为了简洁起见,捆绑包有:AppBundle、BlogBundle、SalesBundle每一个都在{BundleName}''Entity下管理自己的一组实体。设置非常简单,我将共享来自每个捆绑的实体的标头

<?php
namespace AppBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
/**
 * Account
 *
 * @ORM'Table(name="siteengine.account", options={"comment":"Governing User Account Storage"})
 * @ORM'Entity
 */
class Account
{
    /**
     * @var integer
     *
     * @ORM'Column(name="id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;

这个有效。

<?php
namespace SalesBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
/**
 * Client
 *
 * @ORM'Entity(repositoryClass="SalesBundle'Repository'ClientRepository")
 * @ORM'Table(name="sales.Client", options={"comment":"Main/Primary Client Storage for Sales"})
 */
class Client
{
    /**
     * @var integer
     *
     * @ORM'Column(name="id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;

这个也行。

<?php
namespace BlogBundle'Entity;
use Doctrine'Common'Collections'ArrayCollection;
use Doctrine'ORM'Mapping as ORM;
use AppBundle'Entity'Account;
/**
 * @ORM'Entity(repositoryClass="BlogBundle'Repository'PostRepository")
 * @ORM'Table(name="blog.posts", options={"comment":"Primary Blog Post Storage"})
 */
class Post
{
    /**
     * @var integer
     *
     * @ORM'Column(name="id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;

这个没有。

我所说的"不"是指教义命令。我可以在任何地方使用博客实体,并获取我想要和需要的数据,但为了测试这一点,我必须手动为博客实体创建表和模式。无论出于何种原因,应用程序和销售捆绑包都运行良好,我对它们所做的任何更改都会反映在bin/console doctrine:schema:update --dump-sql输出中,但在任何时候,关于博客捆绑包的任何事情都不会反映在同一输出中。

同样,在同一连接下,三个捆绑包中的两个可以使用模式工具,但在执行DQL命令时,所有三个捆绑都可以使用。

我觉得,我在这里失去了理智

我找到了一个解决方案。我不喜欢这个结果。

经过更多的尝试,我注意到如果我将默认连接dbname参数设置为任何一个数据库,并运行该命令,它确实会同步。包括博客数据库。

然后,我偶然发现了一个github项目,它正试图做与我完全相同的事情,文档也让我感到震惊,因为它证实了的嫌疑

  • 创建两个测试数据库"symfonydemo_post"和'symfonydemo_user'
  • 您可以自动构建数据库,只需将parameters.yml中的数据库名称设置为"symfonydemo_post"并运行"php"app/console原则:schema:update'创建表,更改数据库名称设置为"symfonydemo_user",并重复该过程以构建用户实体的表

Whelp。。我想你可以对cli有一点控制,这很酷。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。