【发布时间】:2013-10-11 14:46:16
【问题描述】:
我在两个实体之间建立双向一对一关系时遇到问题。 我有一个可以引用另一个实体“DonationData”的实体“Campaign”。创建的捐赠数据始终与活动相关联。我想要一个双向关系,因为我希望能够从 DonationData 实体中找到相关的活动。
这是我的广告系列实体代码:
<?php
/**
* @ORM\Entity
* ...
*/
class Campaign
{
...
/**
* @ORM\OneToOne(targetEntity="DonationData", mappedBy="campaign", cascade={"persist", "remove"})
*/
protected $donationData;
...
/**
* Set donationData
*
* @param DonationData $donationData
* @return Campaign
*/
public function setDonationData(DonationData $donationData = null)
{
$this->donationData = $donationData;
return $this;
}
...
?>
以及我的 DonationData 实体的相关代码:
<?php
/**
* @ORM\Entity
* ...
*/
class DonationData
{
...
/**
* @ORM\OneToOne(targetEntity="Campaign")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="campaign_id", referencedColumnName="id")
* })
*/
protected $campaign;
...
/**
* Set campaign
* @param Campaign $campaign
*
* @return DonationData
*/
public function setCampaign($campaign)
{
$this->campaign = $campaign;
return $this;
}
...
?>
我在我的活动表单 (CampaignType.php) 中添加我的 DonationData 表单的代码段
<?php
...
->add('donationData', new DonationDataType(), array(
'label' => false
))
...
?>
在 CampaignController.php 方面,当我处理创建操作时,我没有更改任何内容:我只是保留从请求中绑定的相关实体,然后刷新实体管理器:
<?php
...
$em->persist($campaign);
$em->flush();
...
?>
我的问题是,当我想保留一个包含嵌入式 DonationData 表单的 Campaign 实体表单时。我成功地持久化了 Campaign 和 DonationData 实体,但在 Campaign 条目中只有 donation_data_id 引用被持久化。当我在数据库中查看持久的 DonationData 时,campaign_id 始终设置为 NULL。
您对此有什么解释吗?
谢谢。
【问题讨论】:
-
注意:我发现持久化它的唯一方法是在持久化之前手动将 Campaign 设置为 DonationData。但是,在我看来,这并不是真正的“通用”并且是一种干净的方式。我想应该是手动的。我说的对吗?
标签: symfony doctrine-orm one-to-one