Symfony和Doctrine:跨数据库关系

时间:2016-04-18 14:26:12

标签: symfony doctrine-orm entity entity-relationship cross-database

我有两个实体 Entity1 Entity2 与OneToMany关系,但它们存在于两个MySQL数据库中。

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

是否可以创建两个分离的包来实现这些实体?

1 个答案:

答案 0 :(得分:2)

在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;
    }
}

Here一篇关于它的文章。

希望这个帮助