Мне нужно предложение, как бы вы справились с этой ситуацией:
У меня есть две сущности:
Клиенты и бронирование.
У клиентов есть уникальный номер телефона.
Тогда у меня есть форма, где пользователь может выбрать дату и должен предоставить информацию, такую как имя, номер телефона, адрес электронной почты.
Если номер телефона существует в БД, он должен найти эту запись и использовать ее вместо попытки создания новой записи и выбросить UniqueConstraintViolationException
.
Теперь я обрабатываю это внутри EventListener:
public function prePersist(LifecycleEventArgs $args): void
{
$this->em = $args->getEntityManager();
$this->reserve($args);
}
private function reserve(LifecycleEventArgs $args): void
{
$reservation = $args->getEntity();
if ($reservation instanceof Reservation) {
$this->reservation = $reservation;
$this->email = $this->getEmail();
$this->phoneNumber = $this->getInternationalNumber();
//check if customer is new
$this->setCustomer();
}
}
private function setCustomer(): void
{
$customerRepository = $this->em->getRepository(Customer::class);
if ($customer = $customerRepository->findOneBy(['phoneNumber' => $reservation->getCustomer()->getPhoneNumber()])) {
$this->reservation->setCustomer($customer);
}
}
Как бы вы справились с этим? Я думаю, что должен быть лучший способ сделать это (возможно?).