} public static function dealt($callback, $priority = 0) { static::registerModelEvent('dealt', $callback, $priority); } } Bill::dealing(function ($bill) { $event = $bill->event; $model = $field_name = ''; switch ($bill->event) { case Bill::PURCHASE: $model = 'App\\UserFinance'; $field_name = 'used_money'; break; case Bill::HANDLINGFEE: case Bill::WITHDRAWALS: case Bill::INCOME: case Bill::COMMISSION: $model = 'App\\UserFinance'; $field_name = 'money'; break; default: # code... break; } $result = (new $model())->newQuery()->find($bill->uid); if (empty($result)) { return false; } return $bill->is_dealt ? $result->increment($field_name, $bill->value) : $result->decrement($field_name, $bill->value); });