'object', 'to'=>'object']; const TYPES = ['create', 'update', 'update-excel']; public static function historyCreate(User $user, int $tvFk, Tv $newTv) { self::saveHistory('create', $user, $tvFk, null, $newTv); } public static function historyUpdate(User $user, int $tvFk, Tv $oldTv, Tv $newTv) { self::saveHistory('update', $user, $tvFk, $oldTv, $newTv); } public static function historyUpdateExcel(User $user, int $tvFk, Tv $oldTv, Tv $newTv) { self::saveHistory('update-excel', $user, $tvFk, $oldTv, $newTv); } private static function saveHistory(String $type, ?User $user, int $tvFk, ?Tv $oldTv, ?Tv $newTv) { if(!in_array($type, self::TYPES)) throw new \Exception("Type '$type' No Valid"); $tvLog = new TvLog(); $tvLog->tv_fk = $tvFk; $tvLog->type = $type; if($oldTv) { $oldTv = $oldTv->toArray(); unset($oldTv['id']); $tvLog->from =$oldTv; } if($newTv) { $newTv = $newTv->toArray(); unset($newTv['id']); $tvLog->to = $newTv; } if($user) { $tvLog->user_fk = $user->id; } $tvLog->save(); } }