Laravel Enum: ma'lumotlarni to‘g‘ri tasniflash va soddalashtirish

Laravel Enum — bu ma'lumotlarni soddalashtirish va to‘g‘ri tasniflash uchun ishlatiladigan qulay imkoniyatdir. Bu xususiyat, ayniqsa, ma'lumotlar bazasida bir nechta variantlarga ega bo‘lgan maydonlar bilan ishlashda juda foydali bo‘ladi. Masalan, holat, tur, rang kabi qiymatlar uchun enumlar yaratish mumkin.

Laravel 8 versiyasidan boshlab, PHP 8.1 bilan kiritilgan Enum class'lari Laravelda ham qo‘llanilishi mumkin. Laravel enumlaridan foydalanish, dasturda turli holatlarni yoki qiymatlarni aniq va o‘qilishi oson qilib boshqarishga yordam beradi.


Enum nima?

Enum (Enumeration) — bu maxsus turdagi qiymatlar to‘plami. Enumlar yordamida biror maydon uchun ruxsat berilgan barcha qiymatlar aniq belgilanadi. Masalan, foydalanuvchi roli (admin, user, moderator) yoki mahsulotning holati (active, inactive, pending) kabi qiymatlar uchun enumlardan foydalanish mumkin.

Laravelda enumlar qo‘llanilganida, biz faqat imkoniyatlar to‘plamini belgilaymiz va bu qiymatlarni aniq va xavfsiz tarzda boshqarish imkoniyatiga ega bo‘lamiz.


PHP 8.1 Enumlarni Laravelda ishlatish

Laravelda enumlardan foydalanish uchun siz PHP 8.1 va undan yuqori versiyasini o‘rnatgan bo‘lishingiz kerak. PHP 8.1 bilan enumlar rasmiy tarzda qo‘llanila boshladi, va endi Laravelda enumlar bilan ishlash juda oddiy.


1. Enum klasini yaratish

PHP 8.1'dan boshlab, enumlarni yaratish uchun maxsus enum kalit so'zi ishlatiladi. Misol uchun, foydalanuvchi rolini tasvirlovchi enum yaratish:

namespace App\Enums;

enum UserRole: string
{
    case Admin = 'admin';
    case User = 'user';
    case Moderator = 'moderator';
}

Yuqoridagi kodda UserRole enumi yaratildi va bu enumda foydalanuvchining mumkin bo‘lgan uchta roli (admin, user, moderator) aniqlangan.


2. Enumdan foydalanish

Enumdan foydalanish juda oson. Ma'lumotlar bazasiga qiymatlarni saqlashda yoki ular bilan ishlashda enumlar yordamida shartlarni aniq qo‘llash mumkin.

Modelda Enumni ishlatish:

Agar siz users jadvalidagi role ustunini enum bilan bog‘lashni xohlasangiz, quyidagicha amalga oshirishingiz mumkin:

namespace App\Models;

use App\Enums\UserRole;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    // Enumni modelda ishlatish
    protected $casts = [
        'role' => UserRole::class,
    ];
}

Bu holatda, role ustuni enum sifatida saqlanadi va uni ishlatish osonlashadi.

Enumdan qiymat olish:

$user = User::find(1);
echo $user->role->value; // 'admin'

Bu misolda, foydalanuvchining roli enumdan olingan va value orqali aniq qiymatni olish mumkin.

Enum qiymatini tekshirish:

if ($user->role === UserRole::Admin) {
    // Foydalanuvchi admin
}

Enumning qiymatini tekshirishda .Admin kabi to‘g‘ri enum qiymatini ishlatish mumkin.


3. Ma'lumotlar bazasi migratsiyasida Enumlardan foydalanish

Enumlar bilan ishlashda, siz ma'lumotlar bazasida enum turini qo‘llashni ham ko‘rib chiqishingiz mumkin. Laravel migratsiyalarida enumlarni yaratish uchun quyidagi usulni qo‘llash mumkin:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddRoleToUsersTable extends Migration
{
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->enum('role', ['admin', 'user', 'moderator'])->default('user');
        });
    }

    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('role');
        });
    }
}

Yuqoridagi kodda, users jadvaliga role ustuni qo‘shiladi va enum qiymatlari (admin, user, moderator) aniq belgilanadi.


4. Enumlar va validatsiya

Enumlar bilan ishlashda validatsiya qo‘llash ham mumkin. Masalan, foydalanuvchi roli uchun validatsiya qilish:

use App\Enums\UserRole;
use Illuminate\Validation\Rules\Enum;

$request->validate([
    'role' => ['required', new Enum(UserRole::class)],
]);

Bu misolda, role maydoni UserRole enumiga mos keladigan qiymatni qabul qiladi.


Xulosa

Laravelda enumlardan foydalanish kodni toza, xavfsiz va o‘qilishi oson qilishga yordam beradi. Enumlar yordamida biz ma’lum qiymatlar to‘plamini yaratib, ma'lumotlar bazasi, model va validatsiya jarayonlarini aniq boshqarishimiz mumkin. Laravelning enum qo‘llab-quvvatlashi PHP 8.1’dan boshlab juda oson va samarali ishlashni ta’minlaydi.