svisch
@svisch

Doctrine ORM как правильно с точки зрения блокировок и транзакций?

Привет.
Есть код, в котором получаю некую сущность Entity1, допустим ее объект $entity1. В процессе ее создания в одно из его свойств устанавливается некое значение, которое содержится в другой табличке бд, которая играет роль перечня допустимых и незанятых значений (пусть будет сущность Entity2). Т.е. Entity2 содержит предварительный список неких значений, которые использует Entity1, и если Entity1 использует одно из них, то оно (значение из Entity2) помечается как занятое им и другие Entity1 не могут его уже использовать.
Суть вопроса в следующем. Допустим, два пользователя одновременно создают Entity1 и указывают в нем одно и тоже значение из Entity2. После сохранения Entity1 надо пометить Entity2 как использованный этим Entity1 Далее покажу код и хотел бы услышать вопрос как правильно применять flush(), чтобы Entity2 был заблокирован для других пользователей, кроме того, кто уже начал работать с ним. И достаточно ли будет тут неявной блокировки doctrine
$entity1 = new Entity1();
$enitty1->setEntity2('some_value_from_entity2');

$em->persist($entity1);
$em->flush();

$entity2->setEntity1($entity1->getId());
$em->persist($entity2);
$em->flush();


Вопрос в том, можно ли вынести один $em->flush() в конец с точки зрения, чтобы после сохранения $entity1 в бд и до сохранения $entity2 второй никто не использовал, либо надо использовать flush() по отдельности и сперва сохранить $entity2, а после этого только $entity1.

Надеюсь доступно объяснил)
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы