authorize('update', $post); $data = Validator::make(['title' => trim($title)], ['title' => ['required', 'string', 'max:200']])->validate(); $changed = Post::query()->whereKey($post->getKey()) ->where('status', 'draft') ->where('version', $expectedVersion) ->update(['title' => $data['title'], 'version' => DB::raw('version + 1')]); abort_unless($changed === 1, 409, 'Post changed; reload before saving.'); return $post->fresh(); } }