Пакет для функционала срока годности для вашей модели Eloquent Laravel

Установка через композер

composer require mvdnbrk/laravel-model-expires

Чтобы начать использовать этот пакет, достаточно подключить трейт Expirable к вашей модели:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Mvdnbrk\EloquentExpirable\Expirable;

 classSubscription extends Model
{
 use Expirable;
}

Также вам необходимо добавить в вашу модель новое поле expires_at. Пакет включает в себя хелпер для создания этого поля в миграциях.

class CreateSubscriptionsTable extends Migration
{
 public function up(): void
 {
 Schema::create('subscriptions', function (Blueprint $table) {
 $table->expires();
 });
 }

 public function down(): void
 {
 Schema::dropExpires();
 }
}

Трейт Expirable автоматически будет превращать expires_at в DateTime / Carbon

Вы также можете изменить название поля, в котором хранится expires_at путем изменения значения в константе EXPIRES_AT, либо переопределив метод в своей модели getExpiresAtColumn

class Subscription extends Model
{
    use Expirable;

    const EXPIRES_AT = 'ends_at';
}
... а в миграции указать свое имя поля
$table->expires('ends_at');
$table->dropExpires('ends_at);

Время жизни модели TTL можно установить в секундах

$subscription->expires_at = 600;

Либо указать в качестве \Datetime / Carbon объекта

$subscription->expires_at = now()->addMinutes(10);

Вы можете отменить срок жизни модели установив нулевое или отрицательное значение. Либо использовать метод discardExpiration()

$subscription->expires_at = 0;
$subscription->expires_at = -5;

$subscription->discardExpiration()->save();

Проверить истекло ли время документа можно использовав метод expired()

if ($subscription->expired()) {
    //
}

Чтобы узнать, истечет ли срок действия в будущем, используйте метод willExpire()

if ($subscription->willExpire()) {
    //
}

Чтобы получить все модели, которые не имеют срока действия, используйте withoutExpired:

$subscriptions = App\Models\Subscription::withoutExpired()->get();

Получить все просроченные модели можно, используя метод onlyExpired:

$subscriptions = App\Models\Subscription::onlyExpired()->get();

Получить только те модели, которые имеют срок годности можно, используя метод expiring()

$subscriptions = App\Models\Subscription::expiring()->get();

Получить только те модели, которые имеют срок годности но еще не истекают, используя метод notExpiring()

$subscriptions = App\Models\Subscription::notExpiring()->get();

Рейтинг
( 1 оценка, среднее 5 из 5 )
Максим Гречушников/ автор статьи
Мне 40 лет, и больше половины жизни я занимаюсь разработкой. За это время я работал с корпоративными системами, highload-проектами, интеграциями, платежными решениями, внутренними платформами и legacy-кодом, который пережил не одного разработчика. Некоторые системы, кажется, переживут и нас. Моя специализация — PHP, Laravel, backend-архитектура, DDD, тестирование, рефакторинг и техническое лидерство. Мне интересны задачи, где нужно соединить код, бизнес, данные, процессы и здравый смысл. Последние годы я много работаю с LLM и AI-инструментами: использую их для проектирования, анализа кода, документации, тестов, ревью, работы с legacy и построения инженерных процессов. Для меня LLM — это не замена разработчику, а усилитель для тех, кто умеет думать системно. В блоге я пишу о Laravel, PHP, архитектуре, тестировании, инженерной практике, управлении разработкой и реальном применении AI в работе программиста.
Понравилась статья? Поделиться с друзьями: