我尝试使用Symfony 2开发网站。 我想使用2个数据库。一个是通用数据(DB_DATA),另一个是我的应用程序数据(DB_APP)。 我已经制作了两个捆绑包" MyCompany \ DataBundle"和" MyCompany \ AppBundle"。
In" MyCompany \ DataBundle"我已经宣布了一个实体" Customer"它引用了我公司的客户。 在" MyCompany \ AppBundle"有一个实体"帐户"应用程序使用的,必须引用客户。
现在他们看起来像这样:
\src\MyCompany\DataBundle\Entity\Customer.php
<?php
namespace MyCompany\DataBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Customer
*
* @ORM\Table(name="customer")
* @ORM\Entity
*/
class Customer
{
/**
* @var integer
*
* @ORM\Column(name="ID", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="LASTNAME", type="string", length=255, nullable=false)
*/
private $lastName;
/**
* @var string
*
* @ORM\Column(name="FIRSTNAME", type="string", length=255, nullable=false)
*/
private $firstName;
...
}
\src\MyCompany\AppBundle\Entity\Account.php
<?php
namespace MyCompany\AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Account
*
* @ORM\Table(name="account")
* @ORM\Entity
*/
class Account
{
/**
* @var integer
*
* @ORM\Column(name="ID", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\OneToOne(targetEntity="\MyCompany\DataBundle\Entity\Customer")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="CUSTOMER_ID", referencedColumnName="ID")
* })
*/
private $customer;
}
\app\config.yml
doctrine:
dbal:
default_connection: default
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
appdb:
driver: "%database_driver2%"
host: "%database_host2%"
port: "%database_port2%"
dbname: "%database_name2%"
user: "%database_user2%"
password: "%database_password2%"
charset: UTF8
orm:
auto_generate_proxy_classes: %kernel.debug%
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
AppBundle:
type: annotation
mapping: true
dir: "%kernel.root_dir%/../src/MyCompany/AppBundle/Entity/"
prefix: MyCompany\AppBundle\Entity\
is_bundle: false
alias: APP
app:
connection: appdb
mappings:
DataBundle:
type: annotation
mapping: true
dir: "%kernel.root_dir%/../src/MyCompany/DataBundle/Entity/"
prefix: MyCompany\DataBundle\Entity\
is_bundle: false
alias: DATA
每当我尝试更新架构时,都会收到此错误:
[Doctrine\Common\Persistence\Mapping\MappingException]
The class 'MyCompany\DataBundle\Entity\Customer' was not found in the chain configured namespaces MyCompany\AppBundle\Entity
答案 0 :(得分:0)
看看这一行:
@ORM\OneToOne(targetEntity="\MyCompany\DataBundle\Entity\Customer")
首先尝试&#34; \&#34;,因为它不在&#34; MyCompany \ AppBundle \ Entity&#34;命名空间\文件夹:
@ORM\OneToOne(targetEntity="MyCompany\DataBundle\Entity\Customer")
如果path是relative,则假定它是相对于bundle root的。
<强>编辑:强> 评论后发言: (我的意思是)...在我的项目中使用YAML,所以我的描述更短:
orm:
default_entity_manager: default
auto_generate_proxy_classes: "%kernel.debug%"
entity_managers:
default:
connection: default
mappings:
otherbundles: ~
#Kernel links to history
KernelBundle: ~
HistoryBundle: ~
history:
connection: history
mappings:
#History links to kernel
HistoryBundle: ~
KernelBundle: ~
在你的情况下,它看起来像这样(语法不确定):
orm:
auto_generate_proxy_classes: %kernel.debug%
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
AppBundle:
type: annotation
mapping: true
dir: "%kernel.root_dir%/../src/MyCompany/AppBundle/Entity/"
prefix: MyCompany\AppBundle\Entity\
is_bundle: false
alias: APP
DataBundle:
type: annotation
mapping: true
dir: "%kernel.root_dir%/../src/MyCompany/DataBundle/Entity/"
prefix: MyCompany\DataBundle\Entity\
is_bundle: false
alias: DATA
app:
connection: appdb
mappings:
DataBundle:
type: annotation
mapping: true
dir: "%kernel.root_dir%/../src/MyCompany/DataBundle/Entity/"
prefix: MyCompany\DataBundle\Entity\
is_bundle: false
alias: DATA
AppBundle:
type: annotation
mapping: true
dir: "%kernel.root_dir%/../src/MyCompany/AppBundle/Entity/"
prefix: MyCompany\AppBundle\Entity\
is_bundle: false
alias: APP
UPD :它还没有工作......在我阅读this
之后似乎无法工作