2017-03-02 1 views
2

내가 왜 이것을 원한다고 생각하지 않고 (나쁜 접근법처럼 들리 겠지만 좋은 이유가 있음) 표준 프레임 워크 에디션 3.1+에 방법이 있는지 알고 싶습니다. 존재하지 않을 수도있는 엔티티에 대한 관계 연결을 생성하십시오.Symfony & Doctrine : 선택적 외래 키

먼저 스키마를 결정한다는 것은 잘 알고 있습니다. 엔티티가 존재하지 않고 외래 키가 생성되지 않고 필드가 항상 null 인 경우 또는 대상 엔터티가 존재하는 경우 외래 키가 생성되고 필드는 일반 연결처럼 작동합니다 ...

두 번째로 프로젝트를 프로젝트로 변경하기 만하면 수동 스키마 업데이트가 필요할 수도있는 업데이트로 줄을 변경할 수 있습니다. 이 작업을 수행 할 수있는 표준 프레임 워크를 기대 타사 번들 종속성이없는 바람직

...,

누구? 사전에 감사

편집 교리 ORM 내 기관에서 내가 주석을 사용하고

또한 특정 번들이기 때문에

내가 왜이 일을하고의 간단한 버전입니다 선택적 프로젝트 투 프로젝트 (project-to-project), 그리고 번들 A는 번들 B가있는 경우에만 번들 B의 엔티티를 사용할 수 있습니다. 나는 서비스를 사용하는 것을 고려해 보았다. 그리고 container-> container-> get 또는 XML on-invalid = "null"접근법이 있지만 속성 지속성을 다루지는 않는다. 나는 매핑 된 값을 사용자 정의 관계형 필드로 저장하는 것에 만족했습니다. 이것은 더 길고 더 길었습니다. Doctrine이 누락 된 targetEntity를 무시할 수있는 방법이 있는지 궁금해했습니다 ...

답변

1

'nullable association target'에 대한 질문에 응답 할 때 다른 대답을 계속합니다. live data.

이것은 'nullable association target'인 meta data의 답변입니다.

OP는 자신의 경우에는 존재할 수없는 메타 데이터에 targetEntity을 제공 할 것을 요청합니다. 다른 번들 (또는 OP의 신비한 이유가 무엇이든간에)에는 존재하지 않습니다.내가에 구축하는 것이 좋습니다 경우

교리의 런타임 중에 targetEntity를 해결 할 수 있으며 targetEntity가 추상 클래스 또는 인터페이스로 설정할 수 있습니다 TargetEntityListener :

/** 
* @ORM\ManyToOne(targetEntity="Acme\InvoiceBundle\Model\InvoiceSubjectInterface") 
* @var InvoiceSubjectInterface 
*/ 
protected $subject; 
다음 런타임시 대체됩니다 InvoiceSubjectInterface

설정의 예에서 제공하는 특정 클래스 :

# app/config/config.yml 
doctrine: 
    # ... 
    orm: 
     # ... 
     resolve_target_entities: 
      Acme\InvoiceBundle\Model\InvoiceSubjectInterface: AppBundle\Entity\Customer 

을 그래서이 no class를 제공하거나 자신의 SOLU을 구현하기위한 확장 가능한 행동 eiter해야한다 .

+0

이것은 좋은 제안입니다. 고마워, 내 욕구에 어울리는 지 탐구하고 볼거야 ... 너는 전설적인 선생님이야. – Prof83

3

음, 아마도 내 질문을 오해합니다. ,하지만 이것은 정상적인 'nullable'연관성이 들리는 것 같습니다.

/** 
* 
* @var Child 
* @ORM\ManyToOne(targetEntity="Child") 
*/ 
private $child; 

및 널 (NULL) 값을 허용하는 세터로

setChild(Child $child = null) 
{ 
    $this->child = $child; 
} 

를 사용

는 주석을 통해 assocation을 만듭니다. 경우

getChild() 
{ 
    return $this->child; 
} 

는 null를 돌려줍니다 어떤 child이되지 않습니다 : 같은

그리고 당신의 게터가 보일 수 있습니다.

+0

아니, 간단하지는 않지만 targetEntity의 엔티티가 존재할 수도 있고 존재하지 않을 수도 있습니다. 그렇지 않은 경우에는 예외가 이해할 수있을 정도로 발생하므로 doctrine이 무시할 수있는 기능을 원합니다 ...? – Prof83

+0

그래서 질문을 수정하고 실제로 원하는 이유를 설명해야합니다. 나에게 그것은 전혀 이해가되지 않는다. 왜 엔티티를 만들지 않고 사용하지 않으려한다면 엔티티를 사용하지 마십시오. – LBA

+0

제 질문은 엔티티가 존재하지 않을 수도 있다고 설명합니다. 또한 내가 왜 그것을하고 있는지를 면밀히 조사 할 필요가 없다고 말합니다. 질문은 할 수 있습니까 ... 무딘 것이 유감이지만 모든 것이 있습니다. – Prof83