File "Chat.php"

Full Path: /home/trinadezambia/public_html/admin_panel/app/Models/Chat.php
File size: 2.97 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Models;

use Auth;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Traits\DateFormatTrait;

class Chat extends Model
{
    use HasFactory, DateFormatTrait;
    protected $fillable = ['sender_id', 'receiver_id'];
    protected $appends = ['last_message', 'user', 'has_attachment', 'last_message_time'];


    /**
     * Get all of the message for the Chat
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function message()
    {
        return $this->hasMany(Message::class);
    }

    /**
     * Get the receiver that owns the Chat
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function receiver()
    {
        return $this->belongsTo(User::class, 'receiver_id');
    }

    /**
     * Get the receiver that owns the Chat
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function sender()
    {
        return $this->belongsTo(User::class, 'sender_id');
    }

    public function getLastMessageAttribute()
    {

        $message = $this->message()->latest()->first();
        if ($message) {
            return $message->message;
        }

        return '';
    }

    public function getLastMessageTimeAttribute()
    {
        $message = $this->message()->latest()->first();
        if ($message) {
            return $message->created_at;
        }
        return '';
    }

    public function getUserAttribute()
    {
        $user = null;
        $role = request('role');
        if ($this->sender_id == Auth::user()->id) {
            $user = User::select('id', 'first_name', 'last_name', 'image')->with('roles')->where('id', $this->receiver_id)
                ->with('subjectTeachers.subject', 'class_teacher.class_section.class', 'class_teacher.class_section.section', 'class_teacher.class_section.medium');
            if ($role != 'Staff') {
                $user = $user->role($role);
            }
            $user = $user->first();
        } else {
            $user = User::select('id', 'first_name', 'last_name', 'image')->with('roles')->where('id', $this->sender_id)
                ->with('subjectTeachers.subject', 'class_teacher.class_section.class', 'class_teacher.class_section.section', 'class_teacher.class_section.medium');
            if ($role != 'Staff') {
                $user = $user->role($role);
            }
            $user = $user->first();
        }
        return $user;
    }

    public function getCreatedAtAttribute()
    {
        return $this->formatDateValue($this->getRawOriginal('created_at'));
    }

    public function getUpdatedAtAttribute()
    {
        return $this->formatDateValue($this->getRawOriginal('updated_at'));
    }

    public function getHasAttachmentAttribute()
    {
        $message = Message::where('chat_id', $this->id)->latest()->first();
        if ($message && $message->message === null) {
            return true;
        }
        return false;
    }
}