'array', 'user' => 'array', 'client' => 'array', ]; public $guarded = [ 'id', ]; public $sortable = [ 'invoice_number', 'created_at', 'total_net', ]; public $incrementing = false; protected $keyType = 'string'; public function author() { return $this->hasOne(User::class, 'id', 'user_id'); } public function client() { return $this->hasOne(Client::class, 'id', 'user_id'); } public function toSearchableArray() { $array = $this->toArray(); $client_name = Str::slug($array['client']['name'], ' '); return [ 'id' => $this->id, 'clientName' => $array['client']['name'], 'clientNameNgrams' => utf8_encode((new TNTIndexer)->buildTrigrams(implode(', ', [$client_name]))), 'invoiceNumber' => $array['invoice_number'], 'invoiceNumberNgrams' => utf8_encode((new TNTIndexer)->buildTrigrams(implode(', ', [$array['invoice_number']]))), ]; } protected static function boot() { parent::boot(); static::creating(function ($invoice) { $invoice->id = (string) Str::uuid(); $invoice->total_net = invoice_total($invoice); $invoice->total_tax = invoice_total_tax($invoice); $invoice->currency = 'CZK'; }); static::updating(function ($invoice) { $invoice->total_net = invoice_total($invoice); $invoice->total_tax = invoice_total_tax($invoice); }); static::deleting(function ($invoice) { Storage::delete(invoice_path($invoice)); }); } }