forked from eatvio/eatvio-infra
75 lines
2.8 KiB
PHP
75 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
|
/**
|
|
* App\Models\Chat
|
|
*
|
|
* @property int $id
|
|
* @property int $from_user_id
|
|
* @property int $to_user_id
|
|
* @property string $data
|
|
* @property \Illuminate\Support\Carbon|null $created_at
|
|
* @property \Illuminate\Support\Carbon|null $updated_at
|
|
*
|
|
* @method static \Illuminate\Database\Eloquent\Builder|Chat newModelQuery()
|
|
* @method static \Illuminate\Database\Eloquent\Builder|Chat newQuery()
|
|
* @method static \Illuminate\Database\Eloquent\Builder|Chat query()
|
|
* @method static \Illuminate\Database\Eloquent\Builder|Chat whereCreatedAt($value)
|
|
* @method static \Illuminate\Database\Eloquent\Builder|Chat whereData($value)
|
|
* @method static \Illuminate\Database\Eloquent\Builder|Chat whereFromUserId($value)
|
|
* @method static \Illuminate\Database\Eloquent\Builder|Chat whereId($value)
|
|
* @method static \Illuminate\Database\Eloquent\Builder|Chat whereToUserId($value)
|
|
* @method static \Illuminate\Database\Eloquent\Builder|Chat whereUpdatedAt($value)
|
|
* @method static \Illuminate\Database\Eloquent\Builder|Chat withLastMessage(int $userId, int $recipientId)
|
|
* @method static \Illuminate\Database\Eloquent\Builder|Chat withLastTenMessages(int $userId, int $recipientId)
|
|
* @method static \Illuminate\Database\Eloquent\Builder|Chat withLastUserMessage(int $userId)
|
|
*
|
|
* @mixin \Eloquent
|
|
*/
|
|
class Chat extends Model
|
|
{
|
|
use HasFactory;
|
|
|
|
protected $casts = ['created_at' => 'datetime:Y-m-d H:i:s'];
|
|
|
|
public function scopeWithLastUserMessage(Builder $query, int $userId): Model|null
|
|
{
|
|
return $query
|
|
->where('from_user_id', $userId)
|
|
->orWhere('to_user_id', $userId)
|
|
->orderBy('updated_at', 'desc')
|
|
->first();
|
|
}
|
|
|
|
public function scopeWithLastTenMessages(Builder $query, int $userId, int $recipientId): Builder
|
|
{
|
|
return $query
|
|
->where('from_user_id', $userId)
|
|
->where('to_user_id', $recipientId)
|
|
->orWhere(function ($query) use ($userId, $recipientId) {
|
|
return $query->where('from_user_id', $recipientId)
|
|
->where('to_user_id', $userId);
|
|
})
|
|
->orderBy('created_at', 'desc')
|
|
->limit(20);
|
|
}
|
|
|
|
public function scopeWithLastMessage(Builder $query, int $userId, int $recipientId): Model|null
|
|
{
|
|
return $query
|
|
->where('from_user_id', $userId)
|
|
->where('to_user_id', $recipientId)
|
|
->orWhere(function ($query) use ($userId, $recipientId) {
|
|
return $query->where('from_user_id', $recipientId)
|
|
->where('to_user_id', $userId);
|
|
})
|
|
->orderBy('created_at', 'desc')
|
|
->first();
|
|
}
|
|
}
|