Laravel 13 ఇప్పుడు మీరు చాలా మోడల్స్‌లో ఉండే $table, $fillable మరియు $casts ప్రాపర్టీలను నేటివ్ PHP attributesతో భర్తీ చేయవచ్చు. ఈ మార్పు మోడల్ కాన్ఫిగరేషన్ నుండి ఈవెంట్ లిజనర్లు మరియు mailables వరకు డజనుకు పైగా ఫ్రేమ్‌వర్క్ ఫీచర్లకు వర్తిస్తుంది మరియు ఇది ఇప్పటికే ఉన్న కోడ్‌ను దెబ్బతీయకుండా పనిచేస్తుంది.

Laravel ఎందుకు నేటివ్ attributesలను జోడించింది

Laravel చాలా కాలంగా “magic strings” పై ఆధారపడుతోంది – ఇవి మోడల్ క్లాస్ పైన ఉండే కాలమ్ పేర్లు లేదా హిడెన్ ఫీల్డ్స్ యొక్క అర్రేలు (arrays). ఆ అర్రేలు అండర్‌లైయింగ్ స్కీమా గురించి IDEకి ఎటువంటి సమాచారాన్ని అందించవు, కాబట్టి కాలమ్ పేరును రిఫ్యాక్టర్ (refactoring) చేసినప్పుడు అది గమనించబడకుండా మిగిలిపోవచ్చు. కాన్ఫిగరేషన్‌ను నిజమైన, టైప్డ్ కోడ్‌లోకి మార్చడం ద్వారా, Laravel డెవలపర్లు క్లాస్ బాడీని బిజినెస్ లాజిక్‌పై దృష్టి పెట్టేలా చేస్తూనే, ఎడిటర్ ద్వారా ఆటోకంప్లీట్, టైప్-చెకింగ్ మరియు రీనేమ్-రిఫ్యాక్టర్ టూల్స్‌ను ఉపయోగించుకునేలా చేస్తుంది.

ఈ ఫ్రేమ్‌వర్క్ PHP యొక్క reflection API ద్వారా attributesలను చదువుతుంది మరియు ఫలితాన్ని క్యాష్ (cache) చేస్తుంది, కాబట్టి రన్‌టైమ్ ఓవర్‌హెడ్ (runtime overhead) దాదాపు సున్నా. ఇప్పటికే ఉన్న ప్రాపర్టీ-ఆధారిత మోడల్స్ నేడు ఎలా పనిచేస్తున్నాయో అలాగే పనిచేస్తాయి, అంటే మీరు కొత్త సింటాక్స్‌ను క్రమంగా స్వీకరించవచ్చు.

మీరు పొందే ప్రయోజనాలు

  • Typed configuration – Attributes టైప్డ్ ఆర్గ్యుమెంట్లను అంగీకరిస్తాయి, దీనివల్ల magic strings అవసరం ఉండదు. ఒక కాలమ్‌ను రీనేమ్ చేస్తే, ఎక్కడెక్కడ అప్‌డేట్ చేయాలో IDE సూచిస్తుంది.
  • Cleaner class bodies – అన్ని కాన్ఫిగరేషన్లు క్లాస్ పేరు పైన ఉంటాయి; క్లాస్ బాడీలో కేవలం రిలేషన్‌షిప్స్, స్కోప్స్ మరియు మెథడ్స్ మాత్రమే ఉంటాయి.
  • Better IDE experience – ఆటోకంప్లీట్ మరియు స్టాటిక్ అనాలిసిస్ attribute ఆర్గ్యుమెంట్లపై పనిచేస్తాయి, ఇది స్ట్రింగ్స్ యొక్క అర్రేలు చేయలేవు.
  • No breaking changes – Laravel పాత ప్రాపర్టీలను మరియు కొత్త attributes రెండింటినీ చదువుతుంది, కాబట్టి మిశ్రమ కోడ్‌బేస్ (mixed codebase) ఎటువంటి సమస్య లేకుండా నడుస్తుంది.

స్టెప్-బై-స్టెప్ మైగ్రేషన్ గైడ్

  1. Identify the model to migrate
    మోడల్ ఫైల్‌ను ఓపెన్ చేయండి. మొదటి డజన్ లైన్లలో $table, $fillable, $hidden లేదా casts() మెథడ్ ఎక్కువగా ఉంటే, అది మైగ్రేషన్‌కు అనువైనది.

  2. Add the attribute classes
    ఫైల్ పైన, మీరు భర్తీ చేయాలనుకుంటున్న ప్రాపర్టీలకు సంబంధించిన attribute క్లాస్‌లను ఇంపోర్ట్ చేయండి (ఉదాహరణకు, Table, Fillable, Casts). Laravel వీటిని ఇన్-బిల్ట్‌గా అందిస్తుంది.

  3. Replace property declarations with attributes

    // Before
    protected $table = 'site_deployments';
    protected $fillable = ['site_id', 'server_id', 'status'];
    protected function casts(): array
    {
        return ['is_rollback' => 'boolean'];
    }
    
    // After
    #[Table('site_deployments')]
    #[Fillable(['site_id', 'server_id', 'status'])]
    #[Casts(['is_rollback' => 'boolean'])]
    class Deployment extends Model
    {
        // business logic only
    }
    

    Attribute సింటాక్స్ నేరుగా క్లాస్ డిక్లరేషన్ పైన ఉంటుంది. Attribute పనిచేస్తుందని నిర్ధారించుకున్న తర్వాత అసలు ప్రాపర్టీ లేదా మెథడ్‌ను తొలగించండి.

  4. Run the test suite
    mass-assignment, serialization మరియు ఏదైనా కస్టమ్ కాస్టింగ్ (custom casting) మునుపటిలాగే పనిచేస్తున్నాయో లేదో తనిఖీ చేయండి. Laravel యొక్క attribute హ్యాండ్లింగ్ క్యాష్ చేయబడుతుంది, కాబట్టి టెస్ట్ ఫెయిల్ అయితే అది సాధారణంగా attribute ఆర్గ్యుమెంట్లలోని టైపో (typo) వల్ల జరుగుతుంది.

  5. Commit and deploy in small batches
    మైగ్రేట్ చేసిన మోడల్‌ను ఫీచర్ బ్రాంచ్‌కు పుష్ చేయండి, CI పైప్‌లైన్ పాస్ అయిన తర్వాత దానిని మెర్జ్ చేయండి మరియు కొన్ని సర్వర్‌లకు మాత్రమే విడుదల చేయండి. పాత ప్రాపర్టీ సింటాక్స్ ఇంకా సపోర్ట్ చేయబడుతుంది కాబట్టి, ఏదైనా పొరపాటు జరిగినా రన్‌టైమ్ ఎర్రర్ రాదు.

  6. Repeat per namespace
    మొత్తం కోడ్‌బేస్‌ను ఒకేసారి తిరిగి రాయడానికి బదులుగా, ఒక లాజికల్ గ్రూప్ మోడల్స్‌ను (ఉదాహరణకు, అన్ని బిల్లింగ్-సంబంధిత ఎంటిటీలను) attributesకి మార్చండి, ఆపై తదుపరి గ్రూప్ కోసం ఇదే చేయండి. ఇది రిగ్రెషన్ (regression) వల్ల కలిగే నష్టాన్ని తగ్గిస్తుంది.

టూల్స్ మరియు సేఫ్టీ నెట్స్

  • Rector – పునరావృతమయ్యే ప్రాపర్టీ సింటాక్స్‌ను attributesగా మార్చగల ఆటోమేటెడ్ రిఫ్యాక్టరింగ్ టూల్. దీనిని కోడ్‌బేస్ కాపీపై రన్ చేసి, మార్పులను సమీక్షించి, సరైనవిగా అనిపించే వాటిని అప్లై చేయండి.
  • Automated tests – Laravel యొక్క ఇన్-బిల్ట్ టెస్టింగ్ యుటిలిటీలు mass-assignment మరియు JSON అవుట్‌పుట్‌లో తేడాలను గుర్తిస్తాయి. ప్రతి మైగ్రేషన్ దశ తర్వాత టెస్ట్‌లు పాస్ అయ్యేలా చూసుకోండి.
  • Feature flags – మీరు త్వరగా రోల్‌బ్యాక్ చేయాలనుకుంటే, పాత మరియు కొత్త కాన్ఫిగరేషన్‌ల మధ్య మారడానికి ఒక ఫ్లాగ్ (flag) వెనుక కొత్త attribute వినియోగాన్ని ఉంచండి.

మీరు మైగ్రేషన్‌ను ఎప్పుడు వదిలేయవచ్చు

ప్రాజెక్ట్ చిన్నదిగా, స్థిరంగా మరియు అరుదుగా మార్పులు చేసేదిగా ఉంటే, క్లీనర్ మోడల్స్ వల్ల కలిగే ప్రయోజనం దాని కోసం చేసే శ్రమ కంటే తక్కువగా ఉండవచ్చు. Attribute సింటాక్స్ అనేది ఐచ్ఛికం (optional); మీరు క్లాసిక్ ప్రాపర్టీ విధానాన్ని ఎంతకాలం కావాలన్నా ఉపయోగించవచ్చు. దీనికి విరుద్ధంగా, యాక్టివ్‌గా డెవలప్ చేయబడుతున్న అప్లికేషన్ల కోసం, ముఖ్యంగా పెద్ద మోడల్స్ లేదా తరచుగా స్కీమా మార్పులు ఉండే వాటి కోసం, ముందుగానే attributesలను స్వీకరించడం వల్ల భవిష్యత్తులో కలిగే ఇబ్బందులు తగ్గుతాయి.

తదుపరి ఏమి గమనించాలి

Laravel 13 యొక్క attribute సపోర్ట్ మోడల్స్ మాత్రమే కాకుండా ఈవెంట్ లిజనర్లు, నోటిఫికేషన్లు, mailables మరియు బ్రాడ్‌కాస్ట్ ఈవెంట్‌లకు కూడా విస్తరిస్తుంది. కమ్యూనిటీ ఆయా రంగాలలో ఈ సింటాక్స్‌ను స్వీకరించే కొద్దీ, ఇలాంటి రిఫ్యాక్టరింగ్ ప్యాటర్న్‌లు కనిపిస్తాయి. భవిష్యత్తులో వచ్చే మైనర్ రిలీజ్‌లలో కొత్త attribute క్లాస్‌ల కోసం అధికారిక అప్‌గ్రేడ్ గైడ్‌ను గమనిస్తూ ఉండండి.

ముఖ్య అంశం: Laravel 13 మీకు మరింత తేలికైన మరియు IDE-అనుకూలమైన మోడల్స్ కోసం ఎటువంటి అదనపు ఖర్చు లేని మార్గాన్ని అందిస్తుంది. ఒక్కో నేమ్‌స్పేస్‌ను ఒక్కొక్కటిగా మార్చండి, Rector మరియు మీ టెస్ట్ సూట్‌పై ఆధారపడండి, అప్పుడు మీరు కాన్ఫిగరేషన్ డంప్ ఫైల్స్ లాగా కాకుండా, బిజినెస్ స్పెసిఫికేషన్ల లాగా చదవగలిగే క్లాస్‌లను పొందుతారు.