0

是否可以在 Flow 中建立一对一的关系而不必设置属性两次

我有两个以一对一关系连接的表,但其中只有一个应该包含该关系的额外列。

教义明确支持这种行为: http ://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html#one-to-one-bidirectional

应该带有 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);
    }
4

2 回答 2

1

无论如何,解决方法对于在请求期间始终保持关系正确是必要的。但是第二个数据库列不应该是必需的。您是否检查过教义是否真正满足了它?也许/可能只是创建的迁移是错误的,可以省略其中的component列。Tape

于 2015-03-28T21:54:07.610 回答
0

您的解决方法仍然对您有用吗?就我而言,我必须自己更新存储库上的 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);
   }
于 2015-05-20T10:56:36.967 回答