skore-labs / laravel-status
Laravel模型代码状态
Requires
- php: ^7.2|^8.0|^8.1
- illuminate/database: ^6.0|^8.0|^9.0
- illuminate/support: ^6.0|^8.0|^9.0
- spatie/enum: ^3.9
Requires (Dev)
- ext-json: *
- laravel/nova: ^2.0|^3.0
- nunomaduro/larastan: ^1.0|^2.0
- orchestra/testbench: ^4.0|^5.0|^6.0|^7.0
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^7.0|^9.0
Suggests
- laravel/nova: Required if using status nova filter
README
⚠️ 此包将被弃用,将采用此包替代: https://github.com/open-southeners/laravel-model-status
Laravel Eloquent模型的代码状态
状态
开始使用
您可以通过Composer安装此包
composer require skore-labs/laravel-status
然后,您需要发布包配置和迁移,以便修改和/或迁移新的状态表
php artisan vendor:publish --provider="SkoreLabs\LaravelStatus\ServiceProvider"
设置模型
通过添加 SkoreLabs\LaravelStatus\Traits\HasStatuses
特性和接口 SkoreLabs\LaravelStatus\Contracts\Statusable
到您的模型中,使其可以传递一些预定义的事件(见上方),以下是一个示例
<?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|\Spatie\Enum\Enum */ public static function statusesClass() { return \App\Statuses\PostStatuses::class; }
注意:这不是必需的,只有当您没有将所有模型状态枚举类存储在 App\Enums
中作为 ModelStatus
时才需要。
用法
注意:所有方法在状态名称上不区分大小写。
hasStatus
检查模型是否有状态。
注意:它返回当前匹配的状态名称。
// Post has status Published $post->hasStatus('published'); // Post has status Published or Was Published $post->hasStatus(['published', 'was published']);
setStatus
设置状态或修改状态 只有当先前状态匹配键时。
// 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
相同的方式使用 setStatusWhen
方法。
// Change if post has status Published to Was Published. $post->setStatusWhen('published', 'was published');
status
如果提供了参数,它作为 hasStatus 的别名。
如果提供了一个关联数组,它作为 setStatus 的别名。
否则,它将仅检索关系,如 $post->status
或 $post->status()->first()
您还可以按作用域过滤
Post::status('published'); Post::where('user_id', Auth::id())->status('published');
statuses
获取所有可能的模型状态。
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']);
getDefaultStatus
获取模型的默认状态。
// 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的长期支持。
阅读更多: https://laravel.net.cn/docs/master/releases#support-policy
致谢
- Ruben Robles (@d8vjork)
- Skore (https://www.getskore.com/)
- Spatie 为 Enum 包做出贡献 (https://spatie.be/)
- 以及所有贡献者