️ Этот пакет будет устаревшим в пользу этого: https://github.com/open-southeners/laravel-model-status
Статусы кодового типа Laravel для моделей Eloquent.
Вы можете установить пакет через композитор:
composer require skore-labs/laravel-status
Затем вам нужно будет опубликовать конфигурацию пакета и миграции, чтобы вы могли изменить и/или перенести новую таблицу статусов:
php artisan vendor:publish --provider="SkoreLabsLaravelStatusServiceProvider"
Добавьте статусы в свою модель, добавив SkoreLabsLaravelStatusTraitsHasStatuses
и интерфейс SkoreLabsLaravelStatusContractsStatusable
чтобы он мог передавать некоторые предопределенные события (см. выше), вот пример:
<?php
namespace App ;
use Illuminate Database Eloquent Model ;
use SkoreLabs LaravelStatus Contracts Statusable ;
use SkoreLabs LaravelStatus Traits HasStatuses ;
class Post extends Model implements Statusable
{
use HasStatuses;
// Your model logic here...
}
Настройте перечисление для проверки статуса (используя пакет spatie/enum , проверьте их документацию):
/**
* Get the statuses enum used for some utilities.
*
* @return string|SpatieEnumEnum
*/
public static function statusesClass ()
{
return App Statuses PostStatuses::class;
}
Примечание. Это не требуется, только если у вас НЕТ всех классов перечислений статуса модели, хранящихся в AppEnums
как ModelStatus
.
Примечание. Во всех методах имена статусов не чувствительны к регистру.
Проверьте, есть ли у модели статус(ы).
Примечание. Он возвращает текущее имя совпадающего статуса.
// Post has status Published
$ post -> hasStatus ( ' published ' );
// Post has status Published or Was Published
$ post -> hasStatus ([ ' published ' , ' was published ' ]);
Устанавливайте статус или изменяйте статус только в том случае, если предыдущий статус соответствует ключу.
// Set post status to Was Published
$ post -> setStatus ( ' was published ' );
// Change if post has status Published to Was Published.
$ post -> setStatus ([ ' published ' => ' was published ' ]);
Вы также можете использовать атрибут для установки статуса:
$ post -> status = ' was published ' ;
// Better use status method for this
if ( $ post -> hasStatus ( ' published ' )) {
$ post -> status = ' was published ' ;
}
// When save it check and attach the status
$ post -> save ();
Вы также можете сделать то же самое с методом setStatusWhen
, как в примере выше, с setStatus
.
// Change if post has status Published to Was Published.
$ post -> setStatusWhen ( ' published ' , ' was published ' );
Если указан параметр, он действует как псевдоним hasStatus.
Если указан ассоциативный массив, он действует как псевдоним setStatus.
В противном случае он просто получит связь как $post->status
или $post->status()->first()
Также вы можете фильтровать по области:
Post:: status ( ' published ' );
Post:: where ( ' user_id ' , Auth:: id ())-> status ( ' published ' );
Получите все возможные статусы модели.
Post:: statuses ();
// You can use Status model as well
Status:: getFrom (Post::class);
// Also specify value to return like '->value('id')'
Status:: getFrom (Post::class, ' id ' );
// Or return the object with columns like '->first(['id', 'name'])'
Status:: getFrom (Post::class, [ ' id ' , ' name ' ]);
Получите статус модели по умолчанию.
// Default status for post is Published, so it returns Published
Post:: getDefaultStatus ();
// You can use Status model query scope as well
Status:: query ()-> defaultFrom (Post::class)-> first ();
Этот и все наши пакеты Laravel максимально соответствуют LTS-поддержке Laravel.
Подробнее: https://laravel.com/docs/master/releases#support-policy.