Server : Apache System : Linux 145.162.205.92.host.secureserver.net 5.14.0-611.45.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Apr 1 05:56:53 EDT 2026 x86_64 User : tradze ( 1001) PHP Version : 8.1.34 Disable Function : NONE Directory : /home/tradze/public_html/vendor/cmgmyr/messenger/src/Traits/ |
<?php
namespace Cmgmyr\Messenger\Traits;
use Cmgmyr\Messenger\Models\Message;
use Cmgmyr\Messenger\Models\Models;
use Cmgmyr\Messenger\Models\Participant;
use Cmgmyr\Messenger\Models\Thread;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
trait Messagable
{
/**
* Message relationship.
*
* @return HasMany
*
* @codeCoverageIgnore
*/
public function messages()
{
return $this->hasMany(Models::classname(Message::class));
}
/**
* Participants relationship.
*
* @return HasMany
*
* @codeCoverageIgnore
*/
public function participants()
{
return $this->hasMany(Models::classname(Participant::class));
}
/**
* Thread relationship.
*
* @return BelongsToMany
*
* @codeCoverageIgnore
*/
public function threads()
{
return $this
->belongsToMany(
Models::classname(Thread::class),
Models::table('participants'),
'user_id',
'thread_id'
)
->whereNull(Models::table('participants') . '.deleted_at')
->withTimestamps();
}
/**
* Returns the new messages count for user.
*
* @return int
*/
public function newThreadsCount()
{
return $this->threadsWithNewMessages()->count();
}
/**
* Returns the new messages count for user.
*
* @return int
*/
public function unreadMessagesCount()
{
return Message::unreadForUser($this->getKey())->count();
}
/**
* Returns all threads with new messages.
*
* @return Collection
*/
public function threadsWithNewMessages()
{
return $this->threads()
->where(function (Builder $q) {
$q->whereNull(Models::table('participants') . '.last_read');
$q->orWhere(Models::table('threads') . '.updated_at', '>', $this->getConnection()->raw($this->getConnection()->getTablePrefix() . Models::table('participants') . '.last_read'));
})->get();
}
}