Vorher geschrieben:
Ich habe hier zwei Artikel geschrieben, um die Protokollverwaltung und -löschung zu implementieren Protokollierung. Im zweiten Artikel wird hauptsächlich erläutert, wie die Stapeldatenverarbeitung durch importierte Dateien nicht gut überwacht und verarbeitet werden kann. Wie dieser Teil der Datenverarbeitungslogik aufgezeichnet werden kann. Weitere Informationen finden Sie unter Laravel Log Management zum Aufzeichnen von Datenänderungen nach dem Importieren von Dateien.
1. Ich möchte das Betriebsprotokoll des Lagerbestandsmoduls aufzeichnen. Durch Ausführen der folgenden Anweisung wird die WarehouseInventoryObserver-Datei unter app/Observers erstellt.
php artisan make:observer WarehouseInventoryObserver --model=WarehouseInventory
Da die Modelle unter App/Modelle platziert sind, muss der Pfad angegeben werden.
php artisan make:observer WarehouseInventoryObserver --model=Models/WarehouseInventory
Öffnen Sie den Beobachter unter AppProvidersAppServiceProvider
public function boot() { WarehouseInventory::observe(WarehouseInventoryObserver::class); }
2. Natürlich kann hier das Repository oder das Modell verwendet werden. erstellt, aktualisiert und gelöscht bzw. überwachen die neuen, aktualisierten und gelöschten Vorgänge des WarehouseInventory-Modells.
<?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, Datenbank
Das obige ist der detaillierte Inhalt vonWie Laravel Observer verwendet, um das Protokollverwaltungsmodul zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!