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/dev-test/vendorOLD/cmgmyr/messenger/src/Models/ |
<?php
namespace Cmgmyr\Messenger\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model as Eloquent;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* @method static Builder|self unreadForUser(mixed $userId)
*/
class Message extends Eloquent
{
use SoftDeletes;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'messages';
/**
* The relationships that should be touched on save.
*
* @var array
*/
protected $touches = ['thread'];
/**
* The attributes that can be set with Mass Assignment.
*
* @var array
*/
protected $fillable = ['thread_id', 'user_id', 'body'];
/**
* {@inheritDoc}
*/
public function __construct(array $attributes = [])
{
$this->table = Models::table('messages');
parent::__construct($attributes);
}
/**
* Thread relationship.
*
* @return BelongsTo
*
* @codeCoverageIgnore
*/
public function thread()
{
return $this->belongsTo(Models::classname(Thread::class), 'thread_id', 'id');
}
/**
* User relationship.
*
* @return BelongsTo
*
* @codeCoverageIgnore
*/
public function user()
{
return $this->belongsTo(Models::user(), 'user_id');
}
/**
* Participants relationship.
*
* @return HasMany
*
* @codeCoverageIgnore
*/
public function participants()
{
return $this->hasMany(Models::classname(Participant::class), 'thread_id', 'thread_id');
}
/**
* Recipients of this message.
*
* @return HasMany
*/
public function recipients()
{
return $this->participants()->where('user_id', '!=', $this->user_id);
}
/**
* Returns unread messages given the userId.
*
* @param Builder $query
* @param mixed $userId
* @return Builder
*/
public function scopeUnreadForUser(Builder $query, $userId)
{
return $query->has('thread')
->where('user_id', '!=', $userId)
->whereHas('participants', function (Builder $query) use ($userId) {
$query->where('user_id', $userId)
->where(function (Builder $q) {
$q->where('last_read', '<', $this->getConnection()->raw($this->getConnection()->getTablePrefix() . $this->getTable() . '.created_at'))
->orWhereNull('last_read');
});
});
}
}