Próbuję zaimplementować funkcję, która pozwala użytkownikowi określić jego wzajemny status i wybrać innego użytkownika, tak jak ten na Facebooku.Doctrine - Zdobądź starą wartość w detektorze zdarzeń onFlush
moim schemacie bazy danych jak:
UserInfo
podmiot:
class UserInfo
{
/**
* @ORM\OneToOne(targetEntity="User", inversedBy="user_info")
*/
protected $user;
/**
* @ORM\Column(type="text", nullable=true)
* @Assert\NotBlank
*/
protected $status; //Value taken from a dropdown list
/**
* @ORM\OneToOne(targetEntity="User", inversedBy="relationship_with_table")
*/
protected $relationship_user;
}
User
podmiot:
class User
{
/**
* @ORM\OneToOne(targetEntity="UserInfo", mappedBy ="user", cascade={"persist","remove"})
*/
protected $user_info;
/**
* @ORM\OneToOne(targetEntity="UserInfo", mappedBy="relationship_user")
*/
protected $relationship_with_table;
}
UserInfoType
:
class UserInfoType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $option)
{
$builder
->add("birthday", "birthday")
->add("gender", "choice", array("choices" => array("0" => "Male", "1" => "Female")))
->add("status", "choice", array("choices" => array(
"Single" => "Single",
"In relationship" => "In relationship",
"Engaged" => "Engaged",
"Married" => "Married"
)))
->add("relationship_user", "thrace_select2_entity", array(
"class" => 'Zgh\FEBundle\Entity\User',
'label' => 'User',
'empty_value' => 'Select user',
"configs" => array(
"width" => '100%',
),
))
->add("city", "text")
->add("work", "text")
->add("facebook", "url")
->add("twitter", "url")
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
"data_class" => 'Zgh\FEBundle\Entity\UserInfo',
"cascade_validation" => true,
));
}
public function getName()
{
return "user_info";
}
}
Oto odbiornik zdarzeń, który sprawdza status użytkownika i zmienia drugiego użytkownika, działa zgodnie z oczekiwaniami. Ale ma tylko jedną wadę, jeśli użytkownik jest żonaty (A), a następnie zamienił go na żonaty z (B), użytkownik (A) wciąż otrzymuje żonę i nie zostaje zresetowany.
Wszystko, co chcę zrobić, to przed podłączeniem relacji użytkownika do (B), chcę odzyskać (A) i zresetować. Jak to zrobić w przypadku zdarzenia onFlush
.
Dzięki za milion! Działa z '$ uow-> getEntityChangeSet ($ entity)'. Zwrócił tablicę asocjacyjną ze wszystkimi zmienionymi polami. I bez potrzeby wywoływania 'computeChangeSet()'. Dzięki jeszcze raz. –
Świetnie! Dziękuję za aktualizację! – SecretUsername