,我有兩個實體: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
剛剛修復了它 –