Найти в Дзене
Максим Гречушников

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

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

Еще статьи про Laravel на сайте maxyc.ru

Установка через композерomposer 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. Пакет включает в себя хелпер для создания этого поля в миграциях.

<?php

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

<?php

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();