2017-04-14 63 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選項和護照可供選擇。