Установка через композер
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();