'boolean', 'options' => 'array', 'dev_cost' => 'decimal:0', 'monthly_fee' => 'decimal:0', 'quantity' => 'decimal:2', 'unit_price' => 'decimal:2', 'total_price' => 'decimal:2', ]; public function quotation(): BelongsTo { return $this->belongsTo(AiQuotation::class, 'ai_quotation_id'); } public function module(): BelongsTo { return $this->belongsTo(AiQuotationModule::class, 'module_id'); } public function getFormattedDevCostAttribute(): string { return number_format((int) $this->dev_cost).'원'; } public function getFormattedMonthlyFeeAttribute(): string { return number_format((int) $this->monthly_fee).'원'; } public function getOption(string $key, $default = null) { return data_get($this->options, $key, $default); } public function setOption(string $key, $value): void { $options = $this->options ?? []; data_set($options, $key, $value); $this->options = $options; $this->save(); } }