У меня есть объект User с двунаправленным отношением к объекту Passport
/** @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
}
Предположим, что у сущности User есть ссылка на сущность Passport. И теперь в форме мы хотим отменить связь (установите для паспорта значение null). Мы можем выбрать вариант empty_value, поэтому после отправки формы у пользователя не будет паспорта. Но в паспорте все равно будет ссылка на пользователя.
Можно установить UULL (null) в контроллере непосредственно перед привязкой запроса к форме, но
какое лучшее решение здесь?
Это хорошая идея иметь однонаправленные отношения в текущем случае?
Похоже, что в этом случае однонаправленные отношения упростят ситуацию: как насчет опции choice_loader для поля ChoiceType, она выполняет обратный вызов функции, предоставляющей выбор, вы можете предоставить нулевой выбор и список паспортов на выбор ,
Других решений пока нет …