Файл: app/Traits/FileableTrait.php
Строк: 42
<?php
declare(strict_types=1);
namespace AppTraits;
use AppModelsFile;
use IlluminateDatabaseEloquentCollection;
use IlluminateDatabaseEloquentRelationsMorphMany;
trait FileableTrait
{
/**
* Возвращает загруженные файлы
*
* @return MorphMany<File, $this>
*/
public function files(): MorphMany
{
return $this->morphMany(File::class, 'relate')
->orderBy('created_at');
}
/**
* Возвращает файлы
*
* @return Collection<int, File>
*/
public function getFiles(): Collection
{
return $this->files->filter(static fn (File $f) => ! $f->isImage() && ! $f->isVideo());
}
/**
* Возвращает медиафайлы (картинки и видео)
*
* @return Collection<int, File>
*/
public function getMedia(): Collection
{
return $this->files->filter(static fn (File $f) => $f->isImage() || $f->isVideo());
}
/**
* Возвращает медиафайлы, не вставленные в текст
*
* @return Collection<int, File>
*/
public function getDetachedMedia(): Collection
{
return $this->getMedia()->reject(fn (File $f) => str_contains($this->text ?? '', $f->path));
}
}