whereState()).stateChanged), enabling integration with Laravel’s event system (e.g., broadcasting, notifications).TransitionNotAllowedException).illuminate/support compatibility). Risk: Legacy systems may need upgrades.save()). Risk: High-frequency transitions (e.g., real-time systems) may impact performance.status columns) migrate to enums? Backfilling enums may require downtime.if ($model->status === 'pending')).OrderStatus.php).enum OrderStatus: string {
case PENDING = 'pending';
case PROCESSING = 'processing';
case COMPLETED = 'completed';
case CANCELLED = 'cancelled';
public function transitions(): array {
return [
self::PENDING => [self::PROCESSING, self::CANCELLED],
self::PROCESSING => [self::COMPLETED, self::CANCELLED],
];
}
}
HasStates trait and configure the enum class:
use Norotaro\Enumata\HasStates;
class Order extends Model {
use HasStates;
protected $stateEnum = OrderStatus::class;
}
transition() in the model for custom logic:
public function transitionToProcessing(): void {
$this->transition(OrderStatus::PROCESSING);
// Custom logic (e.g., dispatch event, update inventory)
}
WHERE status = 'pending' with whereState(OrderStatus::PENDING).<select> options).| Laravel Version | PHP Version | Compatible? |
|---|---|---|
| 9.x | 8.1+ | ✅ Yes |
| 10.x | 8.1+ | ✅ Yes |
| 11.x | 8.2+ | ✅ Yes |
| 8.x | 7.4+ | ❌ No (enums) |
VARCHAR).UserSubscription).Order, Ticket).if ($order->status === 'pending')).PROCESSING order skip to COMPLETED?").PENDING to COMPLETED").whereState() filters may require understanding enum values.save(), which may not scale for high-frequency state changes (e.g., WebSocket-driven updates).
databaseTransactions or optimistic locking ($model->fresh()).| Failure Scenario | Impact | Mitigation Strategy |
|---|
How can I help you explore Laravel packages today?