使用枚举和模型处理重复状态的最佳方法
Best way to deal with duplicate statuses using enums and models
这个问题与状态的格式、表示和自动完成有关。对于更复杂的场景,我还没有找到有效使用枚举的方法。
我有多个table
- 用户
- Post
- 类别
每个 table 都有一个 status
列以及其他枚举列。我创建了以下枚举:
- App\Enums\User\Status.php;
- App\Enums\Post\Status.php;
- App\Enums\Category\Status.php;
在我的代码中,我需要引用每个模型的状态,例如:
$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
这个问题与状态的格式、表示和自动完成有关。对于更复杂的场景,我还没有找到有效使用枚举的方法。
我有多个table
- 用户
- Post
- 类别
每个 table 都有一个 status
列以及其他枚举列。我创建了以下枚举:
- App\Enums\User\Status.php;
- App\Enums\Post\Status.php;
- App\Enums\Category\Status.php;
在我的代码中,我需要引用每个模型的状态,例如:
$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