У меня есть код / условие для получения чата между пользователями, например:
$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();
}