PHP / Doctrine ORM множественные отношения «один к одному» с одним и тем же классом - PullRequest
2 голосов
/ 16 ноября 2009

Просто работаю над проектом, в котором у меня есть класс с именем «Product» и класс с именем «Image». Каждый продукт имеет два типа изображений: одно «переднее» изображение и одно «заднее» изображение, поэтому я определил два поля, одно из которых называется image_front_id, а другое - image_back_id.

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

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

Теперь, очевидно, когда я определяю другое 'hasOne' для класса 'Image', но теперь с локальным именем поля 'image_back_id', это не работает правильно. Итак, мой вопрос: как я могу определить несколько отношений «один к одному» для одного и того же класса? Я искал это в течение некоторого времени, но, похоже, не могу его найти.

Ответы [ 4 ]

2 голосов
/ 13 декабря 2009

Ответ вправо

$this->hasOne('Image as FrontImage', array('local' => 'image_front_id', 'foreign' => 'id'));
$this->hasOne('Image as BackImage', array('local' => 'image_back_id', 'foreign' => 'id'));
1 голос
/ 19 ноября 2009

Ответ Зеда работает, если у вас есть две разные таблицы, к которым вы пытаетесь относиться, но похоже, что вы пытаетесь связать оба поля с одной и той же таблицей. Решение Артура Франкеля должно работать на вас. У вас не может быть нескольких отношений с одним и тем же именем, поэтому вы должны использовать псевдонимы, чтобы получить 2 разных отношения к одной и той же таблице изображений. Объявляя «Изображение как FrontImage» и «Изображение как BackImage», каждое отношение имеет свой псевдоним.

0 голосов
/ 16 ноября 2009

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

$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' ));
0 голосов
/ 16 ноября 2009

Если я правильно помню, первый параметр - это имя ссылки, а ссылочный класс задается свойством 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' ));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...