love_php/app/Traits/CanPreview.php
2026-04-02 09:20:51 +08:00

46 lines
1.2 KiB
PHP

<?php
namespace App\Traits;
//use App\Models\Previewer;
use App\Contracts\Previewable;
use App\Models\Preview;
use Illuminate\Database\Eloquent\Relations\MorphMany;
trait CanPreview
{
//通用访客功能
public function preview(Previewable $previewable):preview
{
$arr = [
'previewed_id' => $this->primaryId(),
'previewed_type' => get_class(),
];
$result = $this->hasPreviewed($previewable);
if ($result) {
$preview = $previewable->previews()->where($arr)->first();
$preview->increment('num', 1);
}else {
$preview = new Preview($arr);
$previewable->previews()->save($preview);
}
return $preview;
}
public function hasPreviewed(Previewable $previewable):bool
{
$preview = [
'previewed_id' => $this->primaryId(),
'previewed_type' => get_class(),
];
$result = $previewable->previews()->where($preview)->count();
return $result;
}
//用户访问列表(所有服务)
public function previews(): MorphMany
{
return $this->morphMany(Preview::class);
}
}