J'essaie de fournir un moyen de suivre quand un utilisateur apporte une modification à un modèle pour une section de notes dans mon application. Par exemple. John va et modifie 2 champs, une note serait créée disant que John a changé title
de 'Mon titre 1' à 'Mon titre 2' et content
de 'Lipsum' à 'Lipsum2'.Essayer de se brancher sur l'événement Model 'update' avec un trait
est ici un trait que j'ai créé:
<?php
namespace App\Traits;
use Illuminate\Database\Eloquent\Model;
trait TrackChanges
{
public $changes;
public static function bootChangesTrait()
{
static::updating(function($model)
{
$this->changes = [];
foreach($model->getDirty() as $key => $value)
{
$original = $model->getOriginal($key);
$this->changes[$key] = [
'old' => $original,
'new' => $value,
];
}
});
}
}
Et je me sers de ce trait avec succès sur mon modèle. Cependant, je ne suis pas sûr comment capturer le contenu des changements, ou s'ils fonctionnent même correctement.
Dans mon contrôleur j'ai:
$site = Site::findOrFail($id);
// Catch and cast the is_active checkbox if it's been unselected
if (! $request->exists('is_active'))
{
$request->request->add([ 'is_active' => 0 ]);
}
// // Get rid of the CSRF field & method
$data = $request->except([ '_token', '_method' ]);
$site->update($data);
J'ai essayé dd($site->changes)
avant et après $site->update($data);
mais il retourne juste null
.
Qu'est-ce que je fais mal?
Merci! Cela fonctionne parfaitement! – Mark