Мне нужно заблокировать всю таблицу (, а не одну строку )с помощью доктрины, я хотел бы сделать это без собственных запросов, если это возможно.
Документация для пессимистической блокировки описывает только то, как блокировать определенные объекты с помощью этих методов :
У меня есть транзакция, которой нужно вставить строку, значения которой зависят от значений остальных строк в таблице, поэтому мне нужно предотвратить одновременное выполнение двух транзакций в этой таблице.
Я использую явное разграничение транзакций, которое должно хорошо работать с блокировкой (в соответствии с приведенной выше документацией ).
ПРИМЕЧАНИЕ:Оптимистическая блокировка в этом случае недостаточно хороша, я не могу позволить себе повторить транзакцию. Кроме того, запрос не должен быть медленным, поэтому производительность не является проблемой.
РЕДАКТИРОВАТЬ:Я приведу пример. Представьте, что вы хотите вручную построить автоматический приращение _, и вам нужно выбрать максимальное значение ()из таблицы, чтобы получить предыдущий результат, чтобы вставить следующий. Вы должны убедиться, что никакие две транзакции не попытаются вставить одно и то же значение, если они одновременно выберут max ().
Я ищу общее решение этой проблемы, когда автоматическое приращение _не подходит, например, для строк или нескольких столбцов, хэшей или любых других вычислений, которые вы должны выполнить для предыдущего набора строк.
Блокировка — надежное решение, и, в отличие от оптимистичной блокировки, вам не нужно повторять попытки при ошибках.
Итак, есть ли способ использовать блокировку таблиц в доктрине?