Symfony 3 与类表继承的关联 学说或 2.



我有实体用户,可发布,评论,帖子,线程。 注释、发布和线程使用类表继承来实现可发布。因此,每个"可发布"的实体都有所有者、喜欢、报告等。

我试图实现的最终目标是能够调用user->getPosts((,user->getThreads((,user->getComments((。但是,我需要修复我的orm映射配置,因为我收到映射错误

映射 OnlineMovementBundle\Entity\

User#posts 和 OnlineMovementBundle\Entity\Post#owner 彼此不一致。

映射 OnlineMovementBundle\Entity\

User#threads 和 OnlineMovementBundle\Entity\Thread#owner 彼此不一致。

用户

class User extends BaseUser
{
/**
 * @ORMId
 * @ORMColumn(type="integer")
 * @ORMGeneratedValue(strategy="AUTO")
 */
protected $id;
/**
 * @var DoctrineCommonCollectionsCollection
 *
 * @ORMOneToMany(targetEntity="Postable", mappedBy="owner", cascade={"persist"}, orphanRemoval=true)
 */
private $postables;
/**
 * @var DoctrineCommonCollectionsCollection
 *
 * @ORMOneToMany(targetEntity="Post", mappedBy="owner", cascade={"persist"}, orphanRemoval=true)
 */
private $posts;
/**
 * @var DoctrineCommonCollectionsCollection
 *
 * @ORMOneToMany(targetEntity="Thread", mappedBy="owner", cascade={"persist"}, orphanRemoval=true)
 */
private $threads;
/**
 * @var DoctrineCommonCollectionsCollection
 *
 * @ORMOneToMany(targetEntity="Thread", mappedBy="owner", cascade={"persist"}, orphanRemoval=true)
 */
private $comments;

可发布

/**
 * Postable
 *
 * @ORMTable(name="postable")
 * @ORMInheritanceType("JOINED")
 * @ORMDiscriminatorColumn(name="type", type="string")
 * @ORMDiscriminatorMap({
 *   "postable" = "Postable",
 *   "post" = "Post",
 *   "thread" = "Thread",
 *   "comment" = "Comment"
 * })
 * @ORMEntity(repositoryClass="OnlineMovementBundleRepositoryPostableRepository")
 */
class Postable
{
/**
 * @var int
 *
 * @ORMColumn(name="id", type="integer")
 * @ORMId
 * @ORMGeneratedValue(strategy="AUTO")
 */
private $id;
/**
 * @var DoctrineCommonCollectionsCollection
 *
 * @ORMManyToOne(targetEntity="Movement", inversedBy="postables", cascade={"persist"})
 */
private $movement;
/**
 * @var DoctrineCommonCollectionsCollection
 *
 * @ORMManyToOne(targetEntity="User", inversedBy="postables", cascade={"persist"})
 */
private $owner;
/**
 * @var string
 *
 * @ORMColumn(name="comment", type="string", length=2056)
 */
private $comment;
/**
 * @var DoctrineCommonCollectionsCollection
 *
 * @ORMOneToMany(targetEntity="Report", mappedBy="postable", cascade={"persist"}, orphanRemoval=true)
 */
private $reports;
/**
 * @var DoctrineCommonCollectionsCollection
 *
 * @ORMOneToMany(targetEntity="Bump", mappedBy="postable", cascade={"persist"}, orphanRemoval=true)
 */
private $bumps;
/**
 * @var DateTime
 *
 * @ORMColumn(name="date_created", type="datetime")
 */
private $dateCreated;

发布

class Post extends Postable
{
/**
 * @var string
 *
 * @AssertImage(
 *      mimeTypes = {"image/jpeg", "image/gif", "image/png" },
 *      mimeTypesMessage = "upload a jpeg, png, or gif file"
 * )
 *
 * @ORMColumn(name="content", type="string", length=1024, nullable=true)
 */
private $content;
/**
 * @var string
 *
 * @ORMColumn(name="title", type="string", length=128)
 */
private $title;
/**
 * @var DoctrineCommonCollectionsCollection
 *
 * @ORMOneToMany(targetEntity="Comment", mappedBy="movement", cascade={"persist"}, orphanRemoval=true)
 */
private $comments;

评论

class Comment extends Postable
{
/**
 * @var DoctrineCommonCollectionsCollection
 *
 * @ORMManyToOne(targetEntity="Post", inversedBy="comments", cascade={"persist"})
 */
private $post;

线

class Thread extends Postable
{
/**
 * @var DoctrineCommonCollectionsCollection
 *
 * @ORMOneToMany(targetEntity="Thread", mappedBy="parent", cascade={"persist"}, orphanRemoval=true)
 */
private $children;
/**
 * @var Thread
 *
 * @ORMManyToOne(targetEntity="Thread", inversedBy="children", cascade={"persist"})
 */
private $parent;
你不能用

id映射父级,你可以把它做成抽象类,这将是每个孩子的架构,这可能是一个很好的做法。

您的主要错误是父类中的 id 定义,并且您的访问器必须声明为受保护(而不是私有(

最新更新