quarks / laravel-locking
轻松实现乐观 Eloquent 模型锁定功能到您的 Laravel 应用中。
1.0.1
2022-07-17 17:04 UTC
Requires
- php: >=7.2
Requires (Dev)
- laravel/framework: ^6.0 || ^7.0 || ^8.0
This package is auto-updated.
Last update: 2024-09-17 22:11:38 UTC
README
轻松实现乐观 Eloquent 模型锁定功能到您的 Laravel 应用。
安装
composer require quarks/laravel-locking
使用
在您的迁移类中,将版本列添加到您的表中,如下所示
/** * Run the migrations. * * @return void */ public function up() { Schema::table('blog_posts', function (Blueprint $table) { // create column for version tracking $table->lockVersion(); // or to use a custom column name e.g., lock_version $table->lockVersion('lock_version'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('blog_posts', function (Blueprint $table) { $table->dropLockVersion(); // or $table->dropLockVersion('lock_version'); }); }
然后按照如下方式将 LocksVersion
特性添加到您的模型类中
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Quarks\Laravel\Locking\LocksVersion; class BlogPost extends Model { use LocksVersion; /** * Override the default lock version column name, optional. */ protected static function lockVersionColumnName() { return 'lock_version'; } }
在您的 blade 模板中,使用 lockInput
指令将当前锁定版本作为表单的一部分,如下所示
<form method="post"> @lockInput($blogPost) <!-- more fields --> </form>
在您的控制器中,使用以下辅助程序从请求中填充锁定版本
namespace App\Http\Controllers; use Quarks\Laravel\Locking\LockedVersionMismatchException; // ... other imports class BlogPostController extends Controller { // ... more methods public function update(BlogPost $blogPost, BlogPostRequest $request) { $data = $request->validated(); $blogPost->fill($data); $blogPost->fillLockVersion(); try { $blogPost->save(); } catch (LockedVersionMismatchException $e) { abort(409, 'This model was already modified elsewhere.'); } } }
您的模型更新现在可以像上面那样简单地保护免受并发更新的影响。
许可证
见 LICENSE 文件。