Я работаю над проектом в Symfony 4, а база данных находится в postgresql. Существует два метода обновления базы данных:
Метод 1. через скрипт на python с простыми вставками sql
Метод 2. через формы Symfony
Оба эти метода записывают в одну и ту же таблицу.
Сценарий A:
Метод 2. добавляет строку в таблицу, используя форму Symfony (pid - 1)
Метод 1. использует скрипт Python для добавления 500 строк (последовательность pid достигает 501)
Метод 2. Другой пользователь пытается добавить строку, а доктрина пытается вставить с pid = 2, но это должно быть "502"
Я пытался использовать GeneratedValue (стратегии = "AUTO") и "IDENTITY" в определении сущности, но это не решает проблему
/ * Определение класса сущности для поля * /
/**
* @ORM\Id()
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/ * Обработчик представления формы * /
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$data =$form->getData();
$property = new Property();
$property->setTitle($data['title']);
$property->setDescription($data['description']);
$property->setPrice($data['price']);
$em->persist($property);
$em->flush();
return $this->redirectToRoute('property');
}
Возможные решения
Определите поле в классе сущности таким образом, чтобы оно автоматически получило следующее значение auto_increment
Получите следующее значение auto_increment перед вставкой из формы
Замените postgresql на mysql (если это поможет)
Заменить auto_increment на UUID
Пожалуйста, предложите, какое решение лучше использовать, если оно существует