Двунаправленные отношения один-к-одному в потоке
Возможно ли иметь отношения один-к-одному в потоке без необходимости устанавливать атрибуты дважды?
У меня есть две таблицы, которые связаны в отношении один-к-одному, но только одна из них должна содержать дополнительный столбец для этого отношения.
Доктрина явно поддерживает это поведение: 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);
}