Laravel: не разрешать нескольким пользователям обновлять одну и ту же запись базы данных - PullRequest
0 голосов
/ 18 декабря 2018

В Laravel есть какой-либо способ заблокировать определенную запись с пользователем и не разрешать другому пользователю редактировать эту же запись.

Например, пользователь A редактирует запись R1.Эта запись будет заблокирована для других пользователей.В то же время, если какой-либо другой пользователь пытается отредактировать запись R1, он показывает сообщение об ошибке на внешнем интерфейсе, что «Пользователь A в настоящее время редактирует эту запись».и не разрешать обновлять запись.

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

По умолчанию MySQL блокирует базу данных, когда один запрос обновляет запись, а другие запросы выполняются в очереди, чтобы дождаться завершения текущего запроса.

Таким образом, два пользователя не могут обновить одну и ту же запись одновременно.время.Это невозможно.

Однако, если вы имеете в виду, например, когда пользователь начинает редактировать форму или что-то еще, в этот самый момент вы хотите заблокировать все поля формы в базе данных, чтобы когда другие пользователи не могли даже получить доступ кФорма, пока первый пользователь не прекратит редактировать его, затем вы можете пойти с ответом Stony.Просто имейте поле в таблице, в которое вводится идентификатор пользователя, который в настоящее время редактирует форму, чтобы у вас был способ проверить:

  • какой-то пользователь редактирует форму, проверив полеесли он равен нулю или нет
  • также для выборки пользователя на основе идентификатора и отображения сообщения, которое редактирует форму

, я советую вам сделать поле обнуляемым и внешним ключом, чтобы выможет использовать красноречивые отношения, чтобы легко получить пользователя.

0 голосов
/ 18 декабря 2018

Я думаю, что вы не имеете в виду транзакцию, в которой таблица заблокирована в тот момент, когда пользователь сохраняет то, что у вас нет несогласованности.

Я думаю, что в вашем случае вы должны сделать поле в вашей базе данных in_use.Когда пользователь открывает форму редактирования, вы вводите идентификатор пользователя в это поле и блокируете форму.Когда следующий пользователь вводит форму, вы пишете сообщение, что пользователь XY в данный момент редактирует запись.Но тогда вам нужно посмотреть, что вы разблокируете запись, если пользователь покидает форму / запись.

Возможно, что-то подобное может помочь:

https://packagist.org/packages/tokenly/laravel-record-lock

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...