Symfony - если запись существует, используйте ее вместо исключения UniqueConstraintViolationException - PullRequest
0 голосов
/ 30 марта 2019

Мне нужно предложение, как бы вы справились с этой ситуацией:

У меня есть две сущности:

Клиенты и бронирование. У клиентов есть уникальный номер телефона.

Тогда у меня есть форма, где пользователь может выбрать дату и должен предоставить информацию, такую ​​как имя, номер телефона, адрес электронной почты.

Если номер телефона существует в БД, он должен найти эту запись и использовать ее вместо попытки создания новой записи и выбросить 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);
    }
}

Как бы вы справились с этим? Я думаю, что должен быть лучший способ сделать это (возможно?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...