store-manage/app/Models/Message.php

59 lines
1.4 KiB
PHP

<?php
namespace App\Models;
use App\Enums\MessageType;
use App\Traits\HasDateTimeFormatter;
use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Message extends Model
{
use Filterable, HasDateTimeFormatter, HasFactory;
protected $attributes = [
'employee_ids' => [],
];
protected $casts = [
'type' => MessageType::class,
'additional' => 'json',
];
protected $fillable = [
'type',
'title',
'content',
'additional',
'employee_ids',
];
public function scopeOfEmployee(Builder $query, Employee $employee)
{
$query->whereJsonLength('employee_ids', 0)->orWhereJsonContains('employee_ids', $employee->id);
}
public function readingLogs(): HasMany
{
return $this->hasMany(MessageReadingLog::class);
}
protected function employeeIds(): Attribute
{
return Attribute::make(
get: function (mixed $value) {
if (! is_array($ids = json_decode($value ?? '', true))) {
$ids = [];
}
return $ids;
},
set: fn (mixed $value) => json_encode(is_array($value) ? $value : []),
);
}
}