Symfony 和 Doctrine:跨数据库关系

Fra*_*rzi 3 entity entity-relationship cross-database symfony doctrine-orm

我有两个具有 OneToMany 关系的实体Entity1Entity2,但它们位于两个 MySQL 数据库中。

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

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

Mat*_*teo 6

在 Doctrine 中,跨数据库连接数据在技术上并不是通过设计功能来支持的,但是您可以通过稍微欺骗 Doctrine 来使其工作。

\n\n

如果要在实体之间建立关系,那么它们必须使用相同的连接:相同的数据库。

\n\n

让多个数据库工作的关键是在实体类中,您需要指定实体的表名,并以该表所属的数据库名称为前缀。这是一个使用注释的示例:

\n\n
<?php\nnamespace Demo\\UserBundle\\Entity;\n\nuse DoctrineORMMapping as ORM;\n\n/**\n * Demo\\UserBundle\\Entity\\User\n *\n * @ORMTable(name="users.User")\n */\nclass User implements\n{\n  /* ... */\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
<?php\nnamespace Demo\\PostBundle\\Entity;\n\nuse DoctrineORMMapping as ORM;\n\n/**\n * Demo\\PostBundle\\Entity\\Post\n *\n * @ORMTable(name="posts.Post")\n */\nclass Post implements\n{\n  /* ... */\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

和关系表:

\n\n
<?php\nnamespace Demo\\PostBundle\\Entity;\n\nuse DoctrineORMMapping as ORM;\n\n/**\n * Demo\\PostBundle\\Entity\\Post\n *\n * @ORMTable(name="posts.Post")\n */\nclass Post implements\n{\n    /**\n     * @ORM\\ManyToOne(targetEntity="\\Demo\\UserBundle\\Entity\\User")\n     **/\n    private $user;\n\n    /* ... */\n\n    /**\n     * Set user\n     *\n     * @param \\Demo\\UserBundle\\Entity\\Site $site\n     * @return Post\n     */\n    public function setUser($user)\n    {\n        $this->user = $user;\n\n        return $this;\n    }\n\n    /**\n     * Get user\n     *\n     * @return \\Demo\\UserBundle\\Entity\\Site\n     */\n    public function getUser()\n    {\n        return $this->user;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

希望这有帮助

\n