'datetime', 'created_at' => 'datetime', 'updated_at' => 'datetime' ]; /** * The attributes that should be mutated to dates. * * @var array */ protected $dates = [ 'contacts_read_at', 'created_at', 'updated_at' ]; /** * Get unread contacts only. * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeUnread($query) { return $query->whereNull('contacts_read_at'); } /** * Get read contacts only. * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeRead($query) { return $query->whereNotNull('contacts_read_at'); } /** * Get contacts by status. * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $status * @return \Illuminate\Database\Eloquent\Builder */ public function scopeStatus($query, string $status) { return $query->where('contacts_status', $status); } /** * Mark contact as read. * * @return bool */ public function markAsRead(): bool { if ($this->contacts_read_at) { return true; } return $this->update(['contacts_read_at' => \Carbon\Carbon::now()]); } /** * Mark contact as unread. * * @return bool */ public function markAsUnread(): bool { return $this->update(['contacts_read_at' => null]); } /** * Check if contact is read. * * @return bool */ public function isRead(): bool { return !is_null($this->contacts_read_at); } /** * Get formatted created date. * * @return string */ public function getFormattedCreatedAtAttribute(): string { return $this->created_at->format('d/m/Y H:i'); } /** * Get short message (100 characters). * * @return string */ public function getShortMessageAttribute(): string { return strlen($this->contacts_message) > 100 ? substr($this->contacts_message, 0, 100) . '...' : $this->contacts_message; } }