2009-11-16 4 views
2

Просто работаю над проектом, где у меня есть класс под названием «Продукт» и класс под названием «Изображение». Каждый продукт имеет два типа изображений, один «передний» образ и один «обратный» образ, поэтому я определил два поля: один - image_front_id и один - image_back_id.PHP/Doctrine ORM множественные отношения «один к одному» к одному классу

В методе BaseProduct :: нАлАдкА(), я определил соотношение для передних изображений следующим образом:

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

Теперь, очевидно, когда я определяю другую «hasOne» к «Image» класса, но теперь с локальным именем поля '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

Вам не нужно 'refClass' в правильном соотношении 1to1 – develop7

+0

Как бы Доктрина узнала, что отношение BackImage относится к классу Image тогда? – Zed

+0

Я думаю, что это будет просто 'класс' – Swanand

0

Я считаю, что решение заключается в следующем (с использованием «как» ключевое слово):

$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

ответ Zed работает, если у вас есть 2 разных таблиц, которые вы пытаетесь связать, но это звучит, как вы пытаетесь связать оба поля в одной таблице. Решение Артура Франкеля должно работать на вас. Вы не можете иметь несколько отношений с тем же именем, поэтому вам нужно использовать псевдонимы, чтобы получить 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