*/ protected $fillable = [ 'date', 'quantity', 'archive_coupon_id', 'archive_campaign_id', ]; /** * Perform any actions required after the model boots. * * @return void */ protected static function booted(): void { static::creating(function (self $model) { $model->archive_campaign_id = static::resolveArchiveCampaignId($model->archive_campaign_id); $model->archive_coupon_id = static::resolveArchiveCouponId($model->archive_coupon_id); }); static::deleting(function () { throw new \RuntimeException('Deleting an archived stat is not authorized'); }); } // * METHODS /** * Get archive campaign key. * * @return integer */ protected static function resolveArchiveCampaignId(int $id): int { $archiveCampaign = ArchiveCampaign::query()->find($id); if ($archiveCampaign) { return $archiveCampaign->getKey(); } $campaign = Campagne::query()->where('camp_id', $id)->firstOrFail(); return ArchiveCampaign::query()->firstOrCreate( ['campaign_id' => $id], ['name' => $campaign->camp_name, 'archive_site_id' => $campaign->camp_siteId] )->getKey(); } /** * Get archive coupon key. * * @return integer */ protected static function resolveArchiveCouponId(int $id): int { $archiveCoupon = ArchiveCoupon::query()->find($id); if ($archiveCoupon) { return $archiveCoupon->getKey(); } $coupon = Coupon::withTrashed()->where('coupon_id', $id)->firstOrFail(); return ArchiveCoupon::query()->firstOrCreate( ['coupon_code' => $id], ['name' => $coupon->coupon_code] )->getKey(); } // * RELATIONS /** * ArchiveCoupon model relation * @return Illuminate\Database\Eloquent\Relations\BelongsTo */ public function archiveCoupon() { return $this->belongsTo(ArchiveCoupon::class); } /** * ArchiveCampaign model relation * @return Illuminate\Database\Eloquent\Relations\BelongsTo */ public function archiveCampaign() { return $this->belongsTo(ArchiveCampaign::class); } }