skore-labs/laravel-status

此包已被废弃,不再维护。未建议替代包。

Laravel模型代码状态

2.5.2 2022-07-15 20:37 UTC

README

⚠️ 此包将被弃用,将采用此包替代: https://github.com/open-southeners/laravel-model-status

Laravel Eloquent模型的代码状态

状态

packagist version tests StyleCI Codacy Badge Codacy Badge Scc Count Badge Scc Count Badge

开始使用

您可以通过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

致谢