我在这里看到了很多帖子,这些帖子描述了关于在捆绑实体中组织应用程序的问题的分离。但是他们都没有说明这些实体是通过不同的捆绑相关联的。
因为我已经有一个现有的数据库,其中包含帖子,评论,标签,用户,角色等表格,我想将这个定义导入到我的新symfony2项目中。 我的问题是我希望在BlogBundle,UserBundle,StaticBundle等不同的捆绑包中使用它,但我不知道如何将相应的实体导入到正确的捆绑包中。 进一步的问题是在帖子和评论实体中引用了用户实体,那么我该怎么做呢。当我将帖子,评论,标签导入BlogBundle时,用户实体尚不存在。
任何人都可以指导我如何继续这个过程吗?
答案 0 :(得分:0)
实体在捆绑包之间共享(当然)。 如果你想做一个博客,你可以创建一个UserBundle(可以覆盖令人敬畏的FOSUserBundle例如)和BlogBundle。 UserBundle将包含您的用户实体,BlogBundle将包含您的帖子和评论实体。 现在是一个代码示例:
在您的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 documentation,它可能会帮助你理解一切。