Laravel: не разрешать нескольким пользователям обновлять одну и ту же запись в базе данных

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
1 064
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

Возможно, поможет что-то вроде этого:

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

Ответ принят как подходящий

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

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

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

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

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

Другие вопросы по теме