我对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有一点控制,这很酷。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。