Laravel: aggiornare in automatico i campi created_by e updated_by
Laravel gestisce autonomamente i campi created_at e updated_at, popolandoli in fase di creazione o modifica di un record.
Non c'è però una gestione integrata per quanto riguarda i campi created_by e updated_by, che permetterebbero di salvare oltre ai timestamps anche le informazioni riguardanti gli utenti che hanno interagito con il modello.
Per non ripetere codice inutile è possibile creare un Trait da applicare ai modelli interessati.
Come prima cosa all'interno della migrazione creiamo i due campi necessari:
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->string('title');
});
In app/Models/Traits creiamo un nuovo file HasUserinfo.php, con questo contenuto:
<?php
namespace App\Models\Traits;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
trait HasUserinfo
{
public static function boot()
{
parent::boot();
static::creating(function ($model) {
$user = Auth::user();
if ($user) {
$model->created_by = $user->id;
$model->updated_by = $user->id;
}
});
static::updating(function ($model) {
$user = Auth::user();
if ($user) {
$model->updated_by = $user->id;
}
});
}
}
A questo punto è possibile aggiungere il Trait a tutti i modelli per cui vogliamo salvare le informazioni sugli utenti che creano o modifcano un record.
Ad esempio per il model Product scriveremo quanto segue:
<?php
namespace App\Models;
use App\Models\Traits\HasUserinfo;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
use HasUserinfo;
//.........
Con queste poche righe di codice php Eloquent gestirà in autonomia questi due campi salvando delle informazioni utili per gli utenti.

Commenti