,我有两个实体:Job和User。在Symfony2中使用Doctrine找出OneToMany和ManyToOne映射
我遵循了doctrine文档并想出了如何映射ManyToOne和OneToMany关系。
这是我的用户等级:
/**
* User
*
* @ORM\Table(name="user")
* @ORM\Entity
*/
class User extends BaseUser
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
//it has all the necessary fields (username, pass and so on) and the ones related to Job entity:
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Job", mappedBy="user")
* @Type("AppBundle\Entity\Job")
**/
protected $jobs;
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->jobs = new ArrayCollection();
}
/**
* @return ArrayCollection
*/
public function getJobs()
{
return $this->jobs;
}
/**
* @param $jobs
*/
public function setJobs($jobs)
{
$this->jobs = $jobs;
}
/**
* {@inheritdoc}
*/
public function addJob(Job $job)
{
$this->jobs->add($job);
$job->setUser($this);
}
/**
* {@inheritdoc}
*/
public function removeJob(Job $job)
{
$this->jobs->removeElement($job);
}
在另一边,我有工作单位写成这样:
/**
* Job
*
* @ORM\Table(name="hr_job")
* @ORM\Entity
* @ORM\Entity(repositoryClass="AppBundle\Repo\JobRepository")
* @HasLifecycleCallbacks
*/
class Job
{
/**
* @var integer
*
* @Type("integer")
* @ORM\Column(name="job_id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
//other properties go here (title, description and email)
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="jobs")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=true)
* @Expose
* @Type("AppBundle\Entity\User")
**/
protected $user;
/**
* @return mixed
*/
public function getUser()
{
return $this->user;
}
/**
* @param mixed $user
*/
public function setUser($user)
{
$this->user = $user;
}
在控制器,我加入了一个工作,在登录用户,它被插入就好。它有一个与合适用户相关的user_id外键。
但是,当我尝试获取该用户添加的所有作业时会出现问题。
由于某些原因,$ user-> getJobs()总是空的。它的行为真的很奇怪。我试图在PHP中倾销它,我什么都没有。我尝试将它倾倒在树枝上,我得到了PersistentCollection对象,这对我来说并不意味着什么。
任何想法我做错了什么?
编辑:这是我的控制器代码。序列化已正确完成。
$serializer = SerializerBuilder::create()->build();
$jobJSON = $request->getContent();
$loggedInUser = $this->getUser();
$jobClassObject = $serializer->deserialize($jobJSON, "AppBundle\Entity\Job", "json");
$jobClassObject->setUser($loggedInUser);
//$loggedInUser->addJob($jobClassObject);
$em = $this->getDoctrine()->getManager();
$em->persist($jobClassObject);
$em->flush();
为什么你制定者返回任何结果? – scoolnico
刚刚修复了它 –