我无法在Symfony3中获取相关实体的对象

时间:2017-09-17 16:25:53

标签: php symfony doctrine

我使用Symfony 3.2。我有两个相关的实体:

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
 * @ORM\Table(name="user", options={"collate"="utf8mb4_unicode_ci", "charset"="utf8mb4"}, indexes={ @Index(name="idx_email", columns={"email"}) })
 * @UniqueEntity(fields={"email"}, message="Пользователь с данным email'ом существует.", groups={"Registration"})
 * @ORM\HasLifecycleCallbacks()
 */
class User
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     *
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\VisitedPage", mappedBy="user")
     */
    private $visitedPages;


    public function __construct()
    {
        $this->visitedPages = new ArrayCollection();
    }


    public function addVisitedPage(VisitedPage $visitedPage)
    {
        $this->visitedPages[] = $visitedPage;

        return $this;
    }

    /**
     * Remove visitedPage
     *
     * @param \AppBundle\Entity\VisitedPage $visitedPage
     */
    public function removeVisitedPage(\AppBundle\Entity\VisitedPage $visitedPage)
    {
        $this->visitedPages->removeElement($visitedPage);
    }

    /**
     * Get visitedPages
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getVisitedPages()
    {
        return $this->visitedPages;
    }
}

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * VisitedPage
 *
 * @ORM\Table(name="visited_page")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\VisitedPageRepository")
 */
class VisitedPage
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var User
     *
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="visitedPages")
     */
    private $user;


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

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

    /**
     * Set user
     *
     * @param \AppBundle\Entity\User $user
     *
     * @return VisitedPage
     */
    public function setUser(\AppBundle\Entity\User $user = null)
    {
        $this->user = $user;

        return $this;
    }

    /**
     * Get user
     *
     * @return \AppBundle\Entity\User
     */
    public function getUser()
    {
        return $this->user;
    }

    /**
     * Set page
     *
     * @param string $page
     *
     * @return VisitedPage
     */
    public function setPage($page)
    {
        $this->page = $page;

        return $this;
    }

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

当我尝试调用VisitedPage :: getUser()(我的意思是$ visitedPage-&gt; getUser())时,我得到了用户的对象类型。 但是当我调用方法User :: getVisitedPages()时,我得到null。

方法User :: addVisitedPage($ page)工作并保存关系。 我该如何判断这个问题?

//一些要传递验证的文本

3 个答案:

答案 0 :(得分:0)

当您从用户添加访问页面时,请尝试以下操作:

class User
{
    //......
    public function addVisitedPage(VisitedPage $visitedPage)
    {
        $visitedPage->setUser($this);
        $this->visitedPages->add($visitedPage);

        return $this;
    }
}

我认为您需要将cascade={"persist"}添加到User对象内的private $visitedPages;内:

 /**
 *
 * @ORM\OneToMany(targetEntity="AppBundle\Entity\VisitedPage", mappedBy="user", cascade={"persist"})
 */
private $visitedPages;

答案 1 :(得分:0)

我通过运行此命令修复了该问题 - bin/console doctrine:cache:clear-metadata

答案 2 :(得分:0)

你应该运行

php app/console cache:clear --env=prod

php app/console cache:clear --env=dev

取决于你正在工作的环境