jangaraev / eloquent-model-advisory-lock
Handy approach to avoid race conditions when doing upserts in Laravel Eloquent models
0.91
2024-09-25 11:12 UTC
Requires
- php: >=7.4
- illuminate/support: ^7.0|^8.0|^9.0|^10.0|^11.0
README
Often you face the race conditions error when working with DB-intensive operations.
This package contains a trait with the method which helps to avoid that.
Usage
First do reference the trait in your model:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Jangaraev\EloquentModelAdvisoryLock\AppliesAdvisoryLock; class Foo extends Model { use AppliesAdvisoryLock; // ... }
This trait introduces the advisoryLock()
method which receives
a callable to execute.
You then can use this method to wrap your DB intensive calls.
// wrap you DB-intensive operations as a callable to the advisoryLock call static::advisoryLock(fn () => $this->coolRelationship()->firstOrCreate());