Двойная вставка с Symfony 4 - PullRequest
       66

Двойная вставка с Symfony 4

0 голосов
/ 05 ноября 2019

У меня есть код / ​​условие для получения чата между пользователями, например:

    $chat = $chatRepository->findChat($firstUser, $secondUser);
    if (!$chat) {
        $chat = new Chat();
        $chat->setSecondUser($secondUser);
        $chat->setFirstUser($firstUser);
        $entityManager->persist($chat);
        $entityManager->flush();
    } else {
        ...
    }

    return $chat;

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

  id first_user  second_user    time
   1       1           2      10:20:20
   2       1           2      10:20:21

Что не так. Как я могу решить это без уникальных индексов? Спасибо

UPD: функция findChat

public function findChat($userId, $otherUserId)
{
    $qb = $this->createQueryBuilder('u');

    $qb->where($qb->expr()->orX(
        $qb->expr()->andX(
            $qb->expr()->eq('u.firstUser', ':firstUser'),
            $qb->expr()->eq('u.secondUser', ':secondUser')
        ),
        $qb->expr()->andX(
            $qb->expr()->eq('u.firstUser', ':secondUser'),
            $qb->expr()->eq('u.secondUser', ':firstUser')
        )
    ));

    $qb->setParameter('firstUser', $userId);
    $qb->setParameter('secondUser', $otherUserId);
    $qb->orderBy('u.dateCreated', 'DESC');

    return $qb->getQuery()->getOneOrNullResult();
}
...