Двунаправленные отношения один-к-одному в потоке

Возможно ли иметь отношения один-к-одному в потоке без необходимости устанавливать атрибуты дважды?

У меня есть две таблицы, которые связаны в отношении один-к-одному, но только одна из них должна содержать дополнительный столбец для этого отношения.

Доктрина явно поддерживает это поведение: http://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html

Класс, который должен идти со столбцом componenttape:

/**
 * @Flow\Entity
*/
class Component{
    /**
     * @var \Some\Package\Domain\Model\Component\Tape
     * @ORM\OneToOne(cascade={"all"}, inversedBy="component")
     */
    protected $componentTape;
   …
}

Класс, который должен просто найти соединение без дополнительного столбца:

/**
 * @Flow\Entity
*/
class Tape{
    /**
     * @var \ Some\Package\Domain\Model\Component
     * @ORM\OneToOne(mappedBy="componentTape")
     */
    protected $component;
}

Обновление доктрины создаст дополнительные столбцы для обеих моделей.

Вот как выглядит мой обходной путь на данный момент:

class Component{    
     ..    
     /**
     * @param \Some\Package\Domain\Model\Component\Tape $componentTape
     * @return void
     */
    public function setComponentTape($componentTape) {
        $this->componentTape = $componentTape;
        $this->componentTape->setComponent($this);
    }

2 ответа

Решение

Обходной путь будет необходим в любом случае для поддержания правильного отношения во время запроса. Но второй столбец БД не должен быть необходим. Вы проверяли, действительно ли доктрина заполняет это? Может быть / просто созданная миграция неправильна и component колонка в Tape может быть опущен

Ваш обходной путь все еще работает для вас? В моем случае я должен обновить модель ComponentTape в хранилище самостоятельно:

class Component {    

   /**
    * @param \Some\Package\Domain\Model\Component\Tape $componentTape
    * @return void
    */
   public function setComponentTape($componentTape) {
     $this->componentTape = $componentTape;
     $this->componentTape->setComponent($this);
     $this->componentTapeRepository->update($this->componentTape);
   }
Другие вопросы по тегам