Вы можете реализовать блокировку, проще всего было бы добавить два поля к данным, которые вы хотите заблокировать (lock_created Datetime, locked_by int).Затем на странице редактирования (и, вероятно, также на кнопке редактирования) вы проверяете, не является ли (lock_created + lock_interval)
Одна сложная часть этого состоит в том, что делать, когда кто-то редактирует, но не может отправить в течение интервала блокировки.Итак:
- Значение lock_interval составляет 2 минуты.
- В 0:00 Алиса блокирует страницу, что-то редактирует, но получает телефонный звонок и не передает свои изменения
- В 2:30 Боб проверяет страницу, получает измененияблокировка, потому что блокировка Алисы истекла, и редактирует
- В 3:00 Алиса возвращается к своему компу, нажимает отправить -> конфликт.
Кто-то не получает отправленные данные,Обойти это невозможно, если вы установите срок действия блокировки.(И если вы этого не сделаете, блокировки можно оставить навсегда.) Вы можете только решить, какой из них отдавать приоритет (вероятно, проще всего будет использовать новую блокировку, созданную Бобом) и сообщить другой, что срок действия страницы истек, и данные выиграли 'быть внесенным, и передайте им свои правки, чтобы переделать их.
Примечание к структуре таблицы: вы можете создать таблицу 'lock' с полями 'table_name, row_id, lock_created, locked_by', но это, вероятно, будет не самым простым способом, поскольку объединение имен переменных таблицсложный и запутанный.Кроме того, вероятно, бесполезно иметь одно место для хранения всех замков.Для простого механизма, я думаю, что добавить однородные поля в каждую таблицу, в которой вы хотите реализовать механизм блокировки, проще всего.