使用枚举和模型处理重复状态的最佳方法

Best way to deal with duplicate statuses using enums and models

这个问题与状态的格式、表示和自动完成有关。对于更复杂的场景,我还没有找到有效使用枚举的方法。

我有多个table

每个 table 都有一个 status 列以及其他枚举列。我创建了以下枚举:

在我的代码中,我需要引用每个模型的状态,例如:

$user->status = Status::APPROVED;
$post->status = Status::COMPLETE;
$category->status = Status::OPEN;

这些状态彼此无关,并且每个型号都不同。该问题与格式有关,因为如果它们都具有相同的前缀,则很容易混淆状态。

我知道我也可以这样做:

$user->status = \App\Enums\User\Status::APPROVED;
$post->status = \App\Enums\Post\Status::COMPLETE;
$category->status = \App\Enums\Category\Status::OPEN;

不过这不是很干净,我想知道是否有更好的方法。理想情况下我想做的是:

$user->status = User::Status::APPROVED;
$post->status = Post::Status::COMPLETE;
$category->status = Category::Status:OPEN;

我尝试在我的模型中这样做,但没有成功,因为我无法在方法之外实例化新对象:

class User extends Model
{
    public Status $STATUS = new Status();

上面给了我自动完成和简洁的语法,但它显然不起作用。

我的用例有什么解决方案吗?能让我自动完成并保持代码简洁明了的东西?

我觉得你可以用

class User extends Model
{
    /** @var Status */
    public static $status = Status::class;
}

或者

use \App\Enums\User\Status as UserStatus