Symfony2:如何将现有数据库导入到不同的包中

时间:2012-01-21 12:18:14

标签: import symfony entity doctrine-orm bundle

我在这里看到了很多帖子,这些帖子描述了关于在捆绑实体中组织应用程序的问题的分离。但是他们都没有说明这些实体是通过不同的捆绑相关联的。

因为我已经有一个现有的数据库,其中包含帖子,评论,标签,用户,角色等表格,我想将这个定义导入到我的新symfony2项目中。 我的问题是我希望在BlogBu​​ndle,UserBundle,StaticBundle等不同的捆绑包中使用它,但我不知道如何将相应的实体导入到正确的捆绑包中。 进一步的问题是在帖子和评论实体中引用了用户实体,那么我该怎么做呢。当我将帖子,评论,标签导入BlogBu​​ndle时,用户实体尚不存在。

任何人都可以指导我如何继续这个过程吗?

1 个答案:

答案 0 :(得分:0)

实体在捆绑包之间共享(当然)。 如果你想做一个博客,你可以创建一个UserBundle(可以覆盖令人敬畏的FOSUserBundle例如)和BlogBu​​ndle。 UserBundle将包含您的用户实体,BlogBu​​ndle将包含您的帖子和评论实体。 现在是一个代码示例:

在您的UserBundle中:

<?php

namespace YourVendorName\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="my_user_table")
 * @ORM\Entity(repositoryClass="YourVendorName\UserBundle\Entity\UserRepository")
 */
class User
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(name="name")
     */
    private $name;

    // Getters and setters...
}

在BlogBu​​ndle中:

<?php

namespace YourVendorName\BlogBundle\Entity;

class Post
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(name="title", type="string", length=255)
     */
    private $title;

    /**
     * @ORM\Column(name="body", type="text")
     */
    private $body;

    /**
     * @ORM\Column(name="created_at", type="datetime")
     */
    private $createdAt;

    /**
     * @ORM\ManyToOne(targetEntity="YourVendorName\UserBundle\Entity\User")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $author;

    // Getters and setters
}

因此,您可以通过这样的注释引用另一个包中的实体:

@ORM\ManyToOne(targetEntity="YourVendorName\UserBundle\Entity\User")

无论如何,你应该真正阅读Symfony2 documentation,它可能会帮助你理解一切。