2017-04-14 99 views
-1

我有双向关系的用户实体到护照实体设置为空值Symfony的形式 - 用于与OneToOne双向关系的实体

/** @Entity */ 
class User 
{ 

    /** 
    * @OneToOne(targetEntity="Passport", mappedBy="user") 
    * @JoinColumn(name="passport_id", referencedColumnName="id") 
    */ 
    private $passport; 

    // plus other fields 
    // plus getters and setters for all of the above... 
} 


/** @Entity */ 
class Passport 
{ 

    /** 
    * @OneToOne(targetEntity="User", inversedBy="passport", cascade={"persist", "remove"}) 
    * @JoinColumn(name="user_id", referencedColumnName="id") 
    */ 
    private $user; 

} 

和我有FormType

/** @UserType */ 
$builder->add 
(
    'passport', 
    'entity', 
    array(
     'class' => 'AppBundle\Passport', 
     'empty_value' => 'Please choose a passport' 
    ) 
); 

所以提交时为用户选择护照形式,我们也需要在护照实体中设置用户

/** @Entity */ 
    class User 
    { 
     // 
     public function setPassport($passport){ 
      $this->passport=$passport; 
      if ($passport){ 
       $passport->setUser($this); 
      } 
     } 
     //and other setters 
    } 

假设用户实体已链接到Passport实体。现在我们想要解除链接(将护照设置为空)。我们可以选择empty_value选项,因此提交表单后用户将没有护照。但护照仍然会有链接给用户。

是可能的SETUSER(空)的控制器只绑定请求表单之前,但

什么是最好的解决办法吗?

在目前的情况下建立单向关系是一个好主意吗?

回答

0

看来单向关系在这种情况下会使事情变得简单多少,关于ChoiceType字段的choice_loader选项,它会对提供选项的函数执行回调,您可以提供null选项和护照可供选择。