В Laravel есть способ заблокировать определенную запись с пользователем и не разрешить другому пользователю редактировать ту же запись.
Например, пользователь A редактирует запись R1. Эта запись будет заблокирована для других пользователей. В то же время, если какой-либо другой пользователь попытается отредактировать запись R1, он покажет сообщение об ошибке во внешнем интерфейсе, что «Пользователь A в настоящее время редактирует эту запись». и не позволять обновлять запись.
Я думаю, вы не имеете в виду транзакцию, в которой таблица заблокирована в тот момент, когда пользователь сохраняет что-то, что у вас нет несогласованности.
Думаю, в вашем случае вам нужно сделать поле в своей базе данных in_use
. Когда пользователь открывает форму редактирования, вы вводите идентификатор пользователя в это поле и блокируете форму. Когда следующий пользователь войдет в форму, вы напишете сообщение, что пользователь XY редактирует запись в данный момент. Но тогда вы должны посмотреть, что вы разблокируете запись, если пользователь покидает форму / запись.
Возможно, поможет что-то вроде этого:
По умолчанию MySQL блокирует базу данных, когда один запрос обновляет запись, а другие запросы выполняются в очереди, чтобы дождаться завершения текущего запроса.
Таким образом, два пользователя не могут одновременно обновлять одну и ту же запись. Это невозможно.
Однако, если вы имеете в виду, например, когда пользователь начинает редактировать форму или что-то в этом роде, именно в этот момент вы хотите заблокировать все поля формы в базе данных, чтобы, когда другие пользователи не могли даже получить доступ к форме, пока первый пользователь не перестанет ее редактировать, тогда вы может пойти с ответом Стоуни. Просто имейте поле в таблице, которое заполняется идентификатором пользователя, который в настоящее время редактирует форму, таким образом у вас будет способ проверить, если:
Я советую вам сделать поле допускающим значение NULL и внешним ключом, чтобы вы могли использовать красноречивые отношения для легкого извлечения пользователя.