我使用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)工作并保存关系。 我该如何判断这个问题?
//一些要传递验证的文本
答案 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
取决于你正在工作的环境