Symfony2: как импортировать существующую базу данных в разные пакеты - PullRequest
0 голосов
/ 21 января 2012

Я видел здесь много постов, в которых описано разделение задач по организации вашего приложения в пакеты, которые работают с содержащими их сущностями. Но ни один из них не говорит о том, что эти сущности связаны через разные связки.

Поскольку у меня уже есть существующая база данных, которая содержит таблицы для постов, комментариев, тегов, пользователей, ролей и еще кое-что, я хочу импортировать это определение в мой новый проект symfony2. Моя проблема в том, что я хотел бы иметь это в разных пакетах, таких как BlogBundle, UserBundle, StaticBundle, ..., но я не знаю, как импортировать соответствующие объекты в правильный пакет. Еще одна проблема заключается в том, что на сущность пользователя ссылаются внутри сущности поста и комментария, поэтому как мне это сделать. Когда я импортирую сообщение, комментарий, тег в BlogBundle, пользовательский объект еще не существует.

Может кто-нибудь подсказать мне, как продолжить этот процесс?

1 Ответ

0 голосов
/ 21 января 2012

Объекты распределяются между пакетами (конечно).Если вы хотите вести блог, вы можете создать UserBundle (который мог бы переопределить, к примеру, FOSUserBundle ) и BlogBundle.UserBundle будет содержать вашу сущность User, BlogBundle будет содержать ваши сущности Post и Comment.Теперь пример кода:

В вашем 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...
}

В вашем BlogBundle:

<?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 , это может помочь вам понять все.

...