Не уверен точно зависит это от laravel или он тут не причем, вообщем опишу проблему.
Есть путь допустим /book/edit
При заходе на него выполняется код:
$this->locked = self::LOCKED;
$this->locked_at = Carbon::now();
$this->locked_by = \Auth::user()->id;
$this->save();
При выходе выходе со страницы (unload) срабатывает ajax и выполняется этот код
$this->locked = self::UNLOCKED;
$this->locked_at = null;
$this->locked_by = null;
$this->save();
Все нормально работает. Кроме одного случая, когда нажимаешь кнопку обновить в браузере.
Порядок действий происходит наоборот, т.е. снача происходит залачивание, а потом разлочивание, и в итоге пользователь попадает на страницу редактирования и при этом книга не залочина.
Что самое интересное, спомощу сессий, я пытался отследить порядок выполнения lock/unlock
те есть когда происходит lock, пишу в сессию что он произошел, когда unlock тоже самое.
Запись в сесси показывает что порядок правильный но в бд совсем другая информация.
Также пробовал перед lock просто ставить на паузу выполнения скрипта но не помогает
Помогут любые идеи
UPD: Код js для unclock
$(window).bind('unload', function () {
$.ajax({
url: `book/${that.bookId}/unlock`,
type: 'POST',
async : false,
data: {_token: that.token}
});
});