️ 該軟體包將被棄用,取而代之的是:https://github.com/open-southeners/laravel-model-status
Eloquent 模型的 Laravel 程式碼類型狀態。
您可以透過 Composer 安裝該軟體包:
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;
}
注意:這不是必需的,僅當您沒有將所有模型狀態枚舉類別作為ModelStatus
儲存在AppEnums
中時。
注意:所有方法的狀態名稱都不區分大小寫。
檢查模型是否有狀態。
注意:它傳回目前符合的狀態名稱。
// 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 套件都盡可能遵循 Laravel 的 LTS 支援。
了解更多:https://laravel.com/docs/master/releases#support-policy