2013-10-11 2 views
1

두 엔티티간에 양방향 일대일 관계를 설정하는 데 문제가 있습니다. 다른 엔티티 "DonationData"를 참조 할 수있는 엔티티 "Campaign"이 있습니다. 생성 된 기부 데이터는 항상 캠페인에 연결됩니다. DonationData 엔터티에서 관련 캠페인을 찾을 수 있기를 원하기 때문에 양방향 관계가 필요합니다.Symfony2 & Doctrine : id 참조의 일대일 관계 및 지속성

<?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; 
} 


... 
?> 

내가 내 DonationData 양식을 추가 해요 코드의 조각 내 캠페인 양식 (CampaignType.php)

<?php 
... 
->add('donationData', new DonationDataType(), array(
    'label' => false 
)) 
... 
?> 

그리고 CampaignController.php 쪽에서 내가 h 일 때 창조 작업을 andling 것은, 난 아무것도 변경하지 않은 : 난 그냥 요청에서 바인더 제본 관련 기업을 지속하고 엔티티 관리자 플러싱 해요 : 나는 캠페인 엔티티를 유지하고자 할 때

<?php 
... 
$em->persist($campaign); 
$em->flush(); 
... 
?> 

내 문제를 내부에 DonationData 양식이 포함 된 양식. Campaign과 DonationData 엔티티를 모두 성공적으로 유지하지만 Campaign 엔트리에 지속되는 donation_data_id 참조 만 있습니다. 데이터베이스에서 지속 된 DonationData를 볼 때 campaign_id는 항상 NULL로 설정됩니다.

설명이 표시됩니까?

감사합니다. 클래스 DonationData에서

+0

주와 같이

: 나는 그것을 지속 할 수있는 유일한 방법은 수동으로 지속하기 전에 DonationData에 대한 캠페인을 설정하는 것입니다. 그러나, 그것은 정말로 "일반적인"것이 아니라 그것을 할 수있는 깨끗한 방법입니다. 나는 그것이 수동이어야한다고 생각한다. 내가 맞습니까? – MeuhMeuh

답변

1

, 당신은 inversedBy 속성을 지정하지 않은 필드 $ 캠페인,

@ORM\JoinColumn(name="campaign_id", referencedColumnName="id", inversedBy="donationData") 

해야 당신은 부모 폼에서 cascade_validation 기본 옵션을 설정 했습니까? http://symfony.com/doc/current/reference/forms/types/form.html

+0

필드와 계단식 유효성 검사에 지정된 inversedBy 관계를 추가하려고 시도했지만 아무 것도 변경하지 않습니다. 캠페인은 donation_data_id로 유지되지만 donation_data 항목에서 campaign_id는 여전히 null입니다. – MeuhMeuh

+0

아마도 CampaignType 양식에 donationData 양식을 추가하는 방법 때문일 수 있습니까? 내 말은, "새로운 DonationDataType()"을하고있다. 수동으로 설정하지 않으면 "부모"엔티티에 연결할 수 없습니다. – MeuhMeuh

+0

doctrine의 소유 측면이 무엇인지, http://docs.doctrine-project.org/en/latest/reference/unitofwork-associations.html 링크가 이해가 안되는 부분입니다. 캠페인의 donation_data_id 필드는 데이터베이스에 표시됩니다. 엔티티에만 존재해야하며, 기부는 정의 된 foreing 키가있는 것이어야합니다. –