Symfony和Doctrine:跨数据库关系

3

我有两个实体Entity1Entity2,它们之间存在一对多的关系,但是它们存储在两个MySQL数据库中。

我该如何在Symfony中实现这些实体及其关系?

是否可以创建两个独立的bundle来实现这些实体?

1个回答

6
在Doctrine中,跨数据库连接数据在技术上并不被设计为“支持”,但您可以通过一些小技巧让Doctrine正常工作。
如果您想在实体之间建立关系,则它们必须使用相同的连接:即相同的数据库。
让多个数据库正常工作的关键在于您的实体类,您需要指定实体表的表名,并带有其所属数据库名称的前缀。以下是使用注释的示例:
<?php
namespace Demo\UserBundle\Entity;

use DoctrineORMMapping as ORM;

/**
 * Demo\UserBundle\Entity\User
 *
 * @ORMTable(name="users.User")
 */
class User implements
{
  /* ... */
}

并且

<?php
namespace Demo\PostBundle\Entity;

use DoctrineORMMapping as ORM;

/**
 * Demo\PostBundle\Entity\Post
 *
 * @ORMTable(name="posts.Post")
 */
class Post implements
{
  /* ... */
}

和关系表:

<?php
namespace Demo\PostBundle\Entity;

use DoctrineORMMapping as ORM;

/**
 * Demo\PostBundle\Entity\Post
 *
 * @ORMTable(name="posts.Post")
 */
class Post implements
{
    /**
     * @ORM\ManyToOne(targetEntity="\Demo\UserBundle\Entity\User")
     **/
    private $user;

    /* ... */

    /**
     * Set user
     *
     * @param \Demo\UserBundle\Entity\Site $site
     * @return Post
     */
    public function setUser($user)
    {
        $this->user = $user;

        return $this;
    }

    /**
     * Get user
     *
     * @return \Demo\UserBundle\Entity\Site
     */
    public function getUser()
    {
        return $this->user;
    }
}

这里有一篇关于此的文章。

希望这可以帮到你。


谢谢!我能将数据库名称字符串设置为配置参数吗?再见! - Francesco Borzi
嗨@ShinDarth,我认为使用Doctrine注释无法插入参数,但您可以尝试使用XML注释,并放置一个params项,其中包含%db_name_1%。希望这可以帮助到你。 - Matteo
你好@matteo,很抱歉我目前还没有时间,而且我想在一段时间内也不会有时间。但是我会让你知道的,感谢你的询问! - Francesco Borzi
嗨@ShinDarth,我只是好奇,请提供进一步的更新,谢谢。 - Matteo
1
@Vinayak看起来不可能,因为这个技巧必须使用相同的连接:同一数据库。 - Matteo
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接