2009-11-16 3 views
2

'Product'클래스와 'Image'클래스가있는 프로젝트에서 작업하고 있습니다. 각 제품에는 두 가지 유형의 이미지, 즉 하나의 '앞'이미지와 하나의 '뒷면'이미지가 있으므로 image_front_id와 image_back_id라는 두 필드를 정의했습니다.PHP/Doctrine ORM 동일한 클래스에 대한 복수 일대일 관계

$this->hasOne('Image', array ('local' => 'image_front_id', 'foreign' => 'id')); 

를 이제 분명히 내가 클래스 '이미지'또 다른 'hasOne의'를 정의 할 때, 다음과 같은 방법 BaseProduct :: 설정에서

(), I는 전면 이미지의 관계를 정의 하지만 'image_back_id'라는 로컬 필드 이름을 사용하면 올바르게 작동하지 않습니다. 그래서 제 질문은 : 같은 클래스에 대해 여러 개의 일대일 관계를 어떻게 정의 할 수 있습니까? 나는 이것을 얼마 동안 찾고 있었지만 그것을 발견 할 수 없었다. 만약 내가 올바르게 기억

+0

내가 무엇을 당신의 디자인을 변경하고 당신이'image_profile_id'를 제공 할 필요가있을 때 발생, 또는 뒷면에 이미지를 결정, 다른 유형의 이미지에 대한 더 많은 공간을 고려할 것입니다 당신이 그것을 리팩토링 할 수 있도록 어떤 뷰도 얻지 못합니까? OT가되어서 미안합니다. – chelmertz

답변

0

는 첫 번째 매개 변수는 참조의 이름이고, 참조 된 클래스는 refClass 속성에 의해 주어진다 :

$this->hasOne('FrontImage', array('local' => 'image_front_id', 'foreign' => 'id', refClass => 'Image')); 
$this->hasOne('BackImage', array('local' => 'image_back_id', 'foreign' => 'id', refClass => 'Image')); 
+0

정규 1to1 관계에 'refClass'가 필요 없습니다 – develop7

+0

DoImage는 BackImage 관계가 Image 클래스를 어떻게 참조하는지 어떻게 알 수 있습니까? – Zed

+0

나는 그것이 단지'클래스'일 것이라고 생각한다. – Swanand

0

나는 '로'사용 (다음의 해결책이 생각 키워드) : 당신은 당신이 관련하려고하는 2 개 개의 다른 테이블을 가지고 있지만, 당신은 같은 테이블에 두 필드를 관련하려고하는 것처럼 들린다 경우 데이빗의 대답은 작동

$this->hasOne('Image as FrontImage', array('local' => 'image_front_id', 'foreign' => 'id', refClass => 'Image')); 
$this->hasOne('Image as BackImage', array('local' => 'image_back_id', 'foreign' => 'id', refClass => 'Image')); 
1

. Arthur Frankel의 솔루션이 도움이 될 것입니다. 같은 이름의 관계를 여러 개 가질 수 없으므로 별명을 사용하여 동일한 Image 테이블에 2 개의 다른 관계를 가져야합니다. 'Image as FrontImage'및 'Image as BackImage'를 선언하면 각 관계마다 고유 한 별칭이 있습니다.

2

권리 대답은

$this->hasOne('Image as FrontImage', array('local' => 'image_front_id', 'foreign' => 'id')); 
$this->hasOne('Image as BackImage', array('local' => 'image_back_id', 'foreign' => 'id')); 
+0

이것은 올바른 길이다. – Swanand