如何在Symfony 2

时间:2016-05-27 23:53:49

标签: php symfony doctrine entity

我有两个实体VideoComment。 一个视频可以有很多评论(OneToMany)。

实体/ Video.php

class Video
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(type="integer")
     * @ORM\OneToMany(targetEntity="Comment")
     * @ORM\JoinColumn(name="id", referencedColumnName="videoId")
     */
    private $comments;

    /**
     * Set comments
     *
     * @param integer $comments
     * @return comments
     */
    public function setComments($comments)
    {
        $this->comments = $comments;

        return $this;
    }

    /**
     * Get comments
     *
     * @return integer 
     */
    public function getComments()
    {
        return $this->comments;
    }

}

实体/ Comment.php

class Comment
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(type="integer")
     * @ORM\ManyToOne(targetEntity="Video")
     * @ORM\JoinColumn(name="videoId", referencedColumnName="id")
     */
    private $videoId;

    /**
     * @ORM\Column(type="text")
     */
    private $comment;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set videoId
     *
     * @param integer $videoId
     * @return Comment
     */
    public function setVideoId($videoId)
    {
        $this->videoId = $videoId;

        return $this;
    }

    /**
     * Get videoId
     *
     * @return integer
     */
    public function getVideoId()
    {
        return $this->getVideo($this->videoId);
    }

    /**
     * Set comment
     *
     * @param string $comment
     * @return Comment
     */
    public function setComment($comment)
    {
        $this->comment = $comment;

        return $this;
    }

    /**
     * Get comment
     *
     * @return string 
     */
    public function getComment()
    {
        return $this->comment;
    }
}

VideoEntity:id PK

CommentEntity:videoId FK

我在控制器中调用视频,如:

$repository = $this->getDoctrine()->getRepository('AppBundle:Video'); 
$video = $repository->findBy(array('id' => 1));

在此次通话后,我有一个填充的视频实体。 但video.comments实体未填充comment。 它只有一个整数。

是否可以在video.comments实体内填充comment video实体(video.id == comment.videoId)?

示例:

array
-- video entity
---- id
---- comments
------ array
-------- comment entity
---------- comment
-------- comment entity
---------- comment
-------- comment entity
---------- comment

我很感激最佳实践。

感谢。

2 个答案:

答案 0 :(得分:0)

我相信你想EAGER load这些评论:

/**
 * @ORM\Column(type="integer")
 * @ORM\OneToMany(targetEntity="Comment",fetch="EAGER")
 * @ORM\JoinColumn(name="id", referencedColumnName="videoId")
 */
private $comments;

答案 1 :(得分:0)

实体/ Video.php

Error

实体/ Comment.php

/**
 * @ORM\OneToMany(targetEntity="AppBundle\Entity\Comment", mappedBy="videoId")
 * @ORM\JoinColumn(name="id", referencedColumnName="video_id")
 */
private $comments;