Écrit auparavant :
J'ai écrit deux articles ici pour implémenter la gestion des journaux. Le premier article est un simple suivi d'ajout, de suppression et de modification de modèle et. journalisation . Le deuxième article présente principalement comment le traitement des données par lots via les fichiers importés ne peut pas être bien surveillé et traité. Comment enregistrer cette partie de la logique de traitement des données. Pour plus de détails, veuillez consulter Laravel Log Management pour enregistrer les modifications de données après l'importation de fichiers.
1. Créez le fichier d'observateur. Je souhaite enregistrer le journal des opérations du module d'inventaire de l'entrepôt, donc l'exécution de l'instruction suivante créera le fichier WarehouseInventoryObserver sous app/Observers.
php artisan make:observer WarehouseInventoryObserver --model=WarehouseInventory
Étant donné que les modèles sont placés sous app/Models, le chemin doit être précisé.
php artisan make:observer WarehouseInventoryObserver --model=Models/WarehouseInventory
Ouvrez l'observateur sous AppProvidersAppServiceProvider
public function boot() { WarehouseInventory::observe(WarehouseInventoryObserver::class); }
2. Surveillez les opérations d'ajout, de suppression et de modification sous ce module. Bien entendu, le référentiel peut être utilisé ici, ou le modèle peut être utilisé directement. créé, mis à jour et supprimé surveillent respectivement les opérations nouvelles, mises à jour et supprimées du modèle WarehouseInventory.
<?phpnamespace App\Observers;use App\Models\Warehouse;use App\Models\WarehouseInventory;use App\Repositories\ActionLogRepository;use Illuminate\Support\Arr;use Illuminate\Support\Facades\Auth;class WarehouseInventoryObserver{ protected $user_id; protected $warehouse; protected $actionLogRepository; public function __construct( Warehouse $warehouse, ActionLogRepository $actionLogRepository ) { $this->user_id = Auth::user() ? Auth::user()->id : null; $this->warehouse = $warehouse->pluck('name', 'id'); $this->actionLogRepository = $actionLogRepository; } //创建 public function created(WarehouseInventory $warehouseInventory) { if (!empty($this->user_id)) { $attributes = $warehouseInventory->getAttributes(); $attributes = Arr::only($attributes, ['warehouse_id', 'seller_sku', 'quantity', 'box']); $warehouse = $this->warehouse->get($attributes['warehouse_id']); //拼接数据 $data = [ 'module' => 'warehouse_inventory', 'user_id' => $this->user_id, 'type' => 'create', 'content' => [ 'warehouse' => $warehouse, 'seller_sku' => $attributes['seller_sku'], 'original_quantity' => 0, 'current_quantity' => $attributes['quantity'], 'box' => $attributes['box'] ] ]; $this->actionLogRepository->makeModel()->create($data); } } //更新 public function updated(WarehouseInventory $warehouseInventory) { if (!empty($this->user_id)) { $original = $warehouseInventory->getOriginal(); $dirty = $warehouseInventory->getDirty(); $dirty = Arr::except($dirty, ['remark', 'updated_at']); if (count($dirty)) { if (Arr::has($dirty, 'warehouse_id')) { $warehouse = $this->warehouse->get($dirty['warehouse_id']); } else { $warehouse = $this->warehouse->get($original['warehouse_id']); } //拼接数据 $data = [ 'module' => 'warehouse_inventory', 'user_id' => $this->user_id, 'type' => 'update', 'content' => [ 'warehouse' => $warehouse, 'seller_sku' => $original['seller_sku'], 'original_quantity' => $original['quantity'], 'current_quantity' => $dirty['quantity'], 'box' => (Arr::has($dirty, 'box')) ? $dirty['box'] : $original['box'] ] ]; $this->actionLogRepository->makeModel()->create($data); } } } //删除 public function deleted(WarehouseInventory $warehouseInventory) { if (!empty($this->user_id)) { $original = $warehouseInventory->getOriginal(); $warehouse = $this->warehouse->get($original['warehouse_id']); //拼接数据 $data = [ 'module' => 'warehouse_inventory', 'user_id' => $this->user_id, 'type' => 'delete', 'content' => [ 'warehouse' => $warehouse, 'seller_sku' => $original['seller_sku'], 'original_quantity' => $original['quantity'], 'current_quantity' => 0, 'box' => $original['box'] ] ]; $this->actionLogRepository->makeModel()->create($data); } }}
3, base de données
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!