BalanceOperationEnum::class ]; /** * Perform any actions required after the model boots. * * @return void */ protected static function booted() { static::creating(function (self $model) { $model->created_at = now(); if ($model->type->equals(BalanceOperationEnum::debit)) { $model->account->balance = $model->account->balance - $model->amount; } if ($model->type->equals(BalanceOperationEnum::credit)) { $model->account->balance = $model->account->balance + $model->amount; } $model->account->saveOrFail(); }); static::deleting(function () { throw new \Error('Action impossible'); }); } // * RELATIONSHIPS /** * BelongsToMany estimation relation (1 nullable) * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ public function estimation() { return $this->belongsToMany(Estimation::class, EstimationLog::class, 'credit_log_id', 'credit_estimation_id') ->withTimestamps(); } /** * BelongsTo account relation * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function account() { return $this->belongsTo(Account::class, 'credit_account_id'); } }